我将一些简单的用户数据传递到mysql数据库。
PHP的urlencode()返回一个字符串,其中除-_之外的所有非字母数字字符。已被替换为百分号(%)后跟两个十六进制数字。
我并不担心空间会变成加号或其他格式问题。 我也不担心XSS和其他HTML黑客攻击。
我相信我应该避免'和'风格攻击。
问题:是否有其他类型的sql攻击可以与 - 或_或。一起使用。 ?
实施例
mysql_query("UPDATE cars SET color = '".urlencode($c)."' WHERE garage = 29");
提前谢谢
答案 0 :(得分:10)
urlencode()
与SQL有无关,因此它可以防止SQL注入,因为煤油会让你的汉堡变得更加美味。此外,进入数据库的所有内容都将以URL编码结束,如果您想在检索数据库后对它们执行任何有用的操作,则必须对其进行解码。
另一方面,转义查询可以帮助您的应用程序防止SQL注入,仅此而已。它不会修改您输入查询的数据;只有保护您的查询不被篡改。这就是SQL注入的想法,这也是为什么URL编码数据没有做任何事情来防止它。当然,它 将你的撇号'
变成%27
,使它们无害,但正如上段所述,你必须将它们URL解码回撇号中为了使用它们。
使用正确的工具以达到正确的目的。特别是在2011年,您应该使用预准备语句,而不是手动转义查询变量并连接字符串以形成查询。
答案 1 :(得分:9)
没有。使用url编码进行SQL注入保护实际上很危险。
答案 2 :(得分:2)
我认为urlencode
本身不足以阻止sql注入。您必须使用至少mysql_real_escape_string
或prepared statements from PDO.
。
答案 3 :(得分:0)
使用PDO和参数化查询。