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

时间:2010-04-10 03:21:16

标签: php mysql

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

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

5 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:3)

是的,你应该。我们没有注意到某个网站的URL中的模式然后复制了网址但更改了一些部分以绕过登录/访问控制的网站中的某些限制?您是否希望您的网站也容易受到影响?

答案 2 :(得分:3)

当然。

你无法进行足够的验证输入。将其视为垃圾并据此制定计划。如果您希望一切顺利运行,请确保一切检出。

答案 3 :(得分:2)

当然。验证的全部要点是在您期望的范围之外正确处理输入。如果用户给出了您的预期,您就不必验证。你需要假设你的用户可以向你扔任何东西。如上所述,他们可以完全使用手动HTTP请求绕过浏览器。总是防守代码。

答案 4 :(得分:2)

一个很好的描述我曾经从一些着名的CS家伙(不确定是谁,一位C作家?)中听到过“90年代早期的一段时间在互联网上开始的时候已经超过互联网上的好处。任何基于列举不良的想法注定要失败(因为它有很多)“。

不要描述IE的功能 - isSQLcommand()isJavaScript()compilesToBinaryandRuns()。这被称为黑名单,你会筋疲力尽,而且总会有人比你更聪明,更邪恶。

反而关注白名单枚举好,并仅列出您希望发生的事情。有一个select HTML元素,包含男/女选项吗?

if (selectInput == 'male' || selectInput == 'female'){
    //proceed
}
else {
    //dump the user data and start over
}

修改

是安全专家Marcus Ranum:

http://www.ranum.com/security/computer_security/editorials/dumb/