我想使用Ajax和PHP更新数据库中的一行数据;但是,我正在努力解决以下问题:要更新的数据库中的字段(以下称为id
)取决于从发送ajax请求的页面。
我需要将这个id
放到Ajax调用的PHP脚本中,但是:
我不想在页面上的数据属性或隐藏输入中设置id
,因为这些都可以被恶意用户操纵。
同样,使用引荐网址识别id
也很容易被欺骗,因为$_SERVER
并不安全。
我无法在SESSION变量(或COOKIES)中设置id
,因为用户可以打开多个页面,而SESSION只会保留最后一页id
被打开了。
我能想到的唯一解决方案是在db中的表中创建一个随机令牌到id
的映射,并将其传递给SESSION变量(按照上面的#3),然后检查表格中的令牌,然后抓住相应的id
。虽然看起来有点令人费解。
还有其他选择或想法吗?感谢。
答案 0 :(得分:1)
这是与OWASP Top10 A7(缺少功能级别访问控制)相关的问题。
将您的ID放在页面上可能没有问题,因此页面可以将其发回 - 您只需需要验证,允许用户使用实际的保存请求。
试想一下,无论你是否在页面上放置了ID,页面都知道执行操作的基本URL,因此他们可以继续猜测ID。
答案 1 :(得分:0)
简化您的逻辑。从客户端向服务器传递使用哪种类型的id的某种指示器。
如果您创建过于复杂的应用程序逻辑来解决安全问题,那么您的代码可能会遇到更多安全问题。
使用SSL / HTTPS和WAF(Web应用程序防火墙 - 如mod_security)。