php - 保证正确的 Ajax 调用参数值的最佳方式

标签 php ajax encryption

我在一个需要一些 ajax 调用以提高灵 active 和性能的网站上工作。 我的 ajax 调用是针对排名系统的。我需要用 ajax 处理三个输入值(storeID、clientID、orderID)。要使用 ajax 提交操作,我想确保发送的参数值未被使用网络工具的用户修改。所以我在想三种不同的方式来保证发送的信息不被更改:

  1. 发送一个额外值,该值是对一起发送的所有数据进行加密。所以在服务端处理ajax的时候,我可以把发送的数据重新加密,看看加密结果和发送的加密值是否匹配。

  2. 将所有数据作为一个加密值发送。然后在服务器上执行 ajax,我可以解密数据并再次分配值。

  3. 仅发送 orderID 及其加密,然后使用方法 (1) 验证 orderID 未更改,并使用数据库查询获取其他两个信息。

以下是我对这三种方式的看法:

  1. 消耗内存,因为我必须发送 orderID、clientID、storeID、encryptedID。此外,ajax 调用中监控的信息将为人们提供有关他们对订单进行评分时发生的情况的信息。

  2. 我在网上查过 mcrypt_encrypt 和 mcrypt_decrypt,但我从未使用过它们。我看到它们产生了一个长字符串,但我更喜欢让我的数据发送简短或看起来像 md5 加密数据。有没有更好的方法?

  3. 这是一种优雅的方式,它看起来很直接,但需要一些 MySQL 干预,这可能会很耗时,尤其是在未来数据增长时。

那你觉得哪个更好呢?如果您有更多方法,如果您在这里分享,我将不胜感激。谢谢

我想避免的场景示例: 单击按钮将通过传递产品 ID 使用 AJAX 提交表单。用户转到源代码,将产品的 ID 从 X 更改为 Y。现在用户单击按钮并提交表单,ID Y 的产品受到影响。如您所见,发送的参数值是不安全的,可以修改。我正在寻找一种方法来保证发送的参数值正确且未被修改。

PS:这个问题与 CSRF 处理无关。

最佳答案

每个人都试图引导您达到这些点:

在服务器上....

  1. 您知道用户是谁 (auth)。
  2. 您应该定义该用户可以访问的内容 (ACL)。
  3. 您应该验证所请求的产品既存在又允许用户访问。
  4. 如果允许用户对产品进行更改,那么根据定义,他们有权对 X 产品进行更改,如果他们使用 Y 产品信息进行更改,因为他们在源代码中乱搞,那就是在用户身上。
  5. 如果这是与购物车相关的,那么您应该忽略用户传递的所有其他数据(例如,价格)并仅按 ID 加载该产品数据。所以他们不能以 X 产品的价格购买 Y 产品。然后,如果他们在 Firebug 中输入 Y 产品的 ID,谁在乎呢?

如果您不执行 2 和 3,那么您就是在将时间完全浪费在这个想法上。无论您想到什么,都只会增加您的不安全感。

关于php - 保证正确的 Ajax 调用参数值的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23749368/

相关文章:

java - 使用 Md5 保存密码

php - 如何剪掉很长的 Dotrine 注释?

javascript(ajax) 和 php 一起工作吗?

php - 合并并转置 3 个数据数组

php - 在 PHP 和 Javascript 之间传输数组的最佳方法

ajax - JSF/Primefaces AJAX请求真的是异步的吗?

java - 使用 Java 在 ColdFusion 中计算 HMAC-SHA256 摘要

c# - 将 int 转换为 BCD 字节数组

php - API 在 WordPress 中上传文件

php - 插入重复键更新返回值 0