首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php5安全- get/post参数

php5安全- get/post参数
EN

Stack Overflow用户
提问于 2009-11-08 18:30:18
回答 7查看 4.9K关注 0票数 1

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

我熟悉用于javascript代码注入预防的htmlentities和用于防止sql注入的地址斜杠。

所以..。现在,我在每个get/post参数上都使用了这两个参数。

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-11-08 19:49:08

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

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

不,那不管用。这是一个常见的错误,而且有很多非常糟糕的PHP教程材料延续了这个错误。尝试将字符串转义问题拆分到一个小循环中,而不是分散到整个代码中,这听起来很好,但实际上字符串转义并不是这样工作的。每次将一个字符串放入另一个字符串中时,您需要应用正确的转义形式,并且只应用正确的转义形式。你不能提前做到这一点。

不要试图“清理”或“过滤”所有传入参数来编码或删除诸如\<之类的字符。这将导致您的应用程序被像\\\\\\\\\\\\\\\\\\\\\\\\\\&amp;amp;amp;amp;amp;amp;amp;这样的垃圾填满。相反,在将它们转换为不同的文本上下文时,您应该只将它们与其他任何不是来自GET/POST - 的变量一起编码,如用于HTML的htmlspecialchars或用于MySQL字符串文字的mysql_real_escape_string。不过,使用参数化查询通常会更好,这样可以避免SQL转义问题。

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

票数 5
EN

Stack Overflow用户

发布于 2009-11-08 19:44:12

GET和POST变量并不比任何其他变量更危险。您应该在使用点处理注入漏洞,而不是在输入点。请看我的回答:

What’s the best method for sanitizing user input with PHP?

票数 4
EN

Stack Overflow用户

发布于 2009-11-08 18:37:49

您可以将数据筛选用作数据防火墙。

http://www.php.net/filter

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1695973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档