您认为还有什么是防止表单注入、URL注入或任何其他类型的注入的好工具?
不是太具体的代码,只是大局。
发布于 2011-06-27 15:55:18
过滤您的输入/验证您的输出
就这样。为了避免脚本注入或任何其他类型的跨站点脚本,您需要确保网页上显示为文本部分的任何字符都不是5个特殊html字符中的任何一个。使用htmlspecialchars将它们编码为等效的html实体(正常显示,但不由html引擎处理):
对于SQL注入,原理是相同的,通过使用mysql_real_escape_string、mysqli_real_escape_string、pg_escape_string、PHP Data Objects (PDO)或准备好的语句,避免在查询中使用特殊的SQL字符。
为了避免shell命令注入,您需要避免另一组字符。使用escapeshellcmd和escapeshellarg。
而对于其他媒介,则涉及到其他角色,并需要其他功能。正如有人在评论中所说,没有什么灵丹妙药。
发布于 2011-06-27 16:01:00
最好的概括是:滤波器输入逃逸输出(FIEO)。
PHP拥有执行这些功能所需的所有工具,但您需要充分理解它们各自的含义,识别正确的工具并正确地应用它。
把PHP想象成中间的人可能会有所帮助。
在一个方向上,PHP期望处理的任何东西,来自任何外部来源,都应该在可能的情况下根据期望“过滤”。
然后PHP向其传递数据的任何内容都必须进行转义,以便保护next环境免受任何类型的恶意攻击。转义以使其不会损坏数据库,或者转义以使其在回显到网页上时不会引起XSS攻击,这是两种最常见的情况。
发布于 2011-06-27 15:54:53
您正在讨论的各种注入(URL、SQL、表单、头文件等);只有当您不加注意地使用从这些来源检索的数据时,它们才会发生。
在SQL查询中直接使用_GET/_POST/etc变量时,会返回标头甚至脚本文件名/urls;代码会受到注入的影响。
然而,只要你不只是使用这些变量,并且总是正确地转义它们(例如,用于SQL查询的mysql_real_escape_string ),那么注入就不再那么容易了。
在某些地方使用正则表达式来验证输入也是可能的,但最薄弱的环节是您的正则表达式。您必须确保在脚本中可能出现的任何恶意输入上测试正则表达式。
主要的事情就是清理你的输入。永远不要使用用户可以直接更改的任何东西,永远不要。
https://stackoverflow.com/questions/6489958
复制相似问题