Php urlencode()是否足以在2011年阻止所有SQL注入攻击
我正在将一些简单的用户数据传递到mysql数据库中 PHP的urlencode()返回一个字符串,其中除-\之外的所有非字母数字字符都包含在该字符串中。已替换为百分比(%)符号,后跟两个十六进制数字 我不担心空格变成加号或其他格式问题。 我也不担心XSS和其他HTML黑客 我相信我应该不会受到(和)风格的攻击 问:还有其他类型的sql攻击可以与-或uuo或一起使用吗 例如:Php urlencode()是否足以在2011年阻止所有SQL注入攻击,php,mysql,Php,Mysql,我正在将一些简单的用户数据传递到mysql数据库中 PHP的urlencode()返回一个字符串,其中除-\之外的所有非字母数字字符都包含在该字符串中。已替换为百分比(%)符号,后跟两个十六进制数字 我不担心空格变成加号或其他格式问题。 我也不担心XSS和其他HTML黑客 我相信我应该不会受到(和)风格的攻击 问:还有其他类型的sql攻击可以与-或uuo或一起使用吗 例如: mysql_query("UPDATE cars SET color = '".urlencode($c)."' WHER
mysql_query("UPDATE cars SET color = '".urlencode($c)."' WHERE garage = 29");
提前谢谢你我不认为单凭
urlencode
就足以阻止sql注入。您必须至少使用mysql\u real\u escape\u string
或从PDO准备的语句。
使用PDO和参数化查询 urlencode()
与SQL无关,因此它可以防止SQL注入,就像煤油可以让你的汉堡更加美味一样。此外,进入数据库的所有内容都将以URL编码结束,如果您想在检索数据库后对其进行任何有用的操作,则必须对其进行解码
另一方面,转义查询有助于应用程序防范SQL注入,仅此而已。它不会修改您在查询中输入的数据;它只保护您的查询不被篡改。这就是SQL注入的思想,这也是为什么URL编码您的数据不会对其进行任何保护的原因。诚然,它会将撇号“
转换为%27
,使它们无害,但正如上面一段所述,您必须将它们重新URL解码为撇号才能使用它们
为正确的目的使用正确的工具。尤其是在2011年,您应该使用准备好的语句,而不是手动转义查询变量并连接字符串以形成查询。否。使用url编码进行SQL注入保护实际上是危险的
使用
mysql\u real\u escape\u string有什么问题?
?在2011年,你应该放弃mysql\u*函数,开始使用mysqli\u*函数,否则与2013年相比,PDOmysqli是一个痛苦的噩梦。还是不够好。像这样:煤油可以让你的汉堡更美味。:)我理解,对于大多数人来说,你希望这些信息被传递。但我的问题更简单。问题是。如果唯一存在的非alpha是。\u和-,如何使用上面的简单代码示例注入任何sql语句?你知道有只使用这些字符和字母的攻击吗?正如我所说的,我并不担心格式问题,事实上,当我在网页之间传递它们时,让它们以URL编码的格式存在符合我的目的。@Chris:如果你想对它们进行URL编码以供你的应用程序使用,那很好,但不要依赖它来保护你的查询不被注入。正如我最后一段所说,使用正确的工具完成正确的工作。您应该使用专用的mysql\u real\u escape\u string()
函数,或者使用准备好的语句来真正防止SQL注入攻击。第一个也是迄今为止唯一的答案实际上告诉我们可能出现的错误。