Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php urlencode()是否足以在2011年阻止所有SQL注入攻击_Php_Mysql - Fatal编程技术网

Php urlencode()是否足以在2011年阻止所有SQL注入攻击

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数据库中

PHP的urlencode()返回一个字符串,其中除-\之外的所有非字母数字字符都包含在该字符串中。已替换为百分比(%)符号,后跟两个十六进制数字

我不担心空格变成加号或其他格式问题。 我也不担心XSS和其他HTML黑客

我相信我应该不会受到(和)风格的攻击

问:还有其他类型的sql攻击可以与-或uuo或一起使用吗

例如:

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注入保护实际上是危险的

  • URL编码是百分比编码。SQL中的字符在许多数据库中都有特殊的意义。例:LIKE子句。在动态SQL中允许%chars仍然会导致问题
  • 中间(web)服务器可能会自动对url进行解码。Apache可能会这样做
    使用
    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注入攻击。第一个也是迄今为止唯一的答案实际上告诉我们可能出现的错误。