您是否应该进行超出正常用户活动可能性的验证检查?

Sca*_*ace 6 php mysql

嘿伙计们,我最近一直在考虑形式安全问题.我被告知一次又一次检查表格输入是否是一个数字,如果你期望一个数字或逃脱它以防万一(除非你使用适当的mysqli格式),以避免注入.

1.安全检查完成后,我是否应该进行额外的逻辑检查?例如,如果用户正在向他们发送朋友请求,例如,即使用户正在查看他们自己的页面,我的用户界面也不会显示该表单.

Jos*_*osh 7

您在HTML或JavaScript中执行的任何操作都不足以阻止某人将数据直接发布到您的HTTP服务器.因此,将浏览器发送的任何内容(甚至是cookie!)视为"用户输入"并相应地保护.

因为即使您的表单可能不允许我向自己发送朋友请求,如果我正在运行Fiddler,我可以设置断点,更改POST变量,然后恢复请求,您的服务器也不知道.

事实上,这是一个很好的开眼练习.如果您下载Fiddler,您可以观看浏览器向您的网站发送或接收的所有内容.浏览器发送的任何内容都不应该被隐式信任.

  • 绝对.存储cookie时,浏览器会将它们存储在客户端上.然后使用*every*single请求将它们传输到服务器.这就是为什么他们不能被信任,因为他们可以被修改或欺骗.这也是不在cookie中存储大量信息的好理由.更好的解决方案是存储某种密钥并在服务器上保持实际数据的安全. (2认同)

Mat*_*hen 2

当然。验证的重点是正确处理超出您预期的输入。如果用户给了你你所期望的,你就不必验证。您需要假设您的用户绝对可以向您扔任何东西。如前所述,他们可以使用手动 HTTP 请求完全绕过浏览器。始终以防御性方式编写代码。