保证正确Ajax调用参数值的最佳方法

CMP*_*MPS 4 php encryption ajax

我正在开发一个需要一些ajax调用的网站,以提高灵活性和性能.我的ajax调用是一个排名系统.我需要使用ajax(storeID,clientID,orderID)处理三个输入值.要使用ajax提交操作,我想确保使用Web工具的用户不会修改发送的参数值.所以我想到了三种不同的方法来保证发送的信息没有改变:

  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处理无关.

小智 5

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

在服务器上....

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

如果你没有做2和3,你就是在浪费你的时间完全依靠这个想法.无论你想出什么,只会增加你的不安全感.