php5安全性 - 获取/发布参数

ufk*_*ufk 1 php security

确保get/post参数不会提供任何安全漏洞的最有效方法是什么.

我是javascript代码注入预防和addslashes的家庭,以防止SQL注入.

所以..现在我在每个get/post参数上都使用它们.

我可以使用任何其他功能来更好地防止这些漏洞或是否有任何其他安全问题,我应该担心与我的PHP代码有关?

bob*_*nce 5

htmlentities(或htmlspecialchars)和addslashes(或mysql_real_escape_string其他适合数据库的转义函数; addslashes总是错误的)与GET/POST参数无关.它们是传出转义函数,其输入可能来自参数,但可能同样来自其他地方,例如静态字符串或从数据库中获取的字符串.

现在我在每个get/post参数上都使用它们.

不,那不行.这是一个常见的错误,其中一个错误就是许多完全可怕的PHP教程材料.试图将字符串转义的问题分解为一个小循环,而不是遍布整个代码听起来不错,但字符串转义不像现实中那样工作.每次将字符串放入另一个字符串中时,您需要应用正确的转义形式,并且只能使用正确的转义形式.你不能提前做到这一点.

不要试图"消毒"或"过滤"所有传入的参数来编码或删除像\或的字符<.这将导致您的应用程序填写了像垃圾\\\\\\\\\\\\\\\\\\\\\\\\\\&amp;amp;amp;amp;amp;amp;amp;.相反,你应该只对它们进行编码 - 以及任何其他不是来自GET/POST的变量 - 在最后一刻将它们分配到不同的文本上下文时,比如htmlspecialcharsHTML或mysql_real_escape_stringMySQL字符串文字.通过参数化查询通常会更好,这可以避免SQL转义问题.

这并不是说您不应该检查传入的数据是否符合您的应用程序的要求.如果你有一个字段,你希望得到一个整数,intval在使用它之前一定要确定它.如果你有一个简单的单行文本字符串,你不希望包含换行符,请务必过滤\n字符串中的字符以及所有其他控制字符[\x00-\x1F\x7F].但这些是应用程序要求,而不是您必须在所有输入中运行的东西.