我最近一直在阅读关于SQL注入的预防,我正在努力培养不同功能之间的一些理解,以便我可以学习基础知识。
我已经阅读过关于mysql_real_escape_string
的内容,我知道它基本上是转义它认为“特殊”的字符,因此不会混淆SQL语法吗?
现在,假设至少在某种程度上是正确的 - 是否需要将stripslashes
函数与mysql_real_escape_string
结合使用?我想知道stripslashes
是什么以及它是什么。
答案 0 :(得分:12)
如果您在使用stripslashes
后立即在输入上使用mysql_real_escape_string
,则会有效撤消它。使用stripslashes
可能还有其他原因,但在我的情况下,我只需要它来撤消魔法引号的恐怖。它实际上与addslashes
相反。
addslashes
不一定转义输入与mysql_real_escape_string
相同,并且它们不能用于同一目的。
甚至比mysql_*
更好,你应该阅读使用PDO
中的预备语句。那么你甚至不必担心mysql_*
或stripslashes
(魔术引号除外)。
答案 1 :(得分:4)
函数stripslashes()
将转义使用反斜杠\
转义的字符。它通常用于通过addslashes()
转义的字符串,或者如果您的PHP配置已启用magic_quotes
。
使用mysql_real_escape_string()
之类的SQL转义函数时,不需要使用stripslashes()
,因为MySQL适配器只会在插入数据库时转义值 - 斜杠不会保留在实际价值。如果您对已使用stripslashes()
转义的变量使用mysql_real_escape_string()
,则会删除斜杠,就好像它使用addslashes()
进行转义一样 - 尽管毫无意义。
如果您的目标是阻止SQL注入,我强烈建议您查看与mysql_
方法相对的MySQLi或PDO。 MySQLi和PDO都提供了准备语句,如果使用得当,它们将阻止SQL-Injection,而不需要记住调用特殊的转义函数或担心你的数据是否会被修改。
答案 2 :(得分:1)
stripslashes函数用于Un-quotes a quoted string
示例:
<?php
echo stripslashes("how\'s going on?");
?>
上面代码的输出将是:
how's going on?
更多详情:
答案 3 :(得分:1)
结帐
http://php.net/manual/en/language.types.string.php
http://php.net/manual/en/function.stripslashes.php
http://php.net/manual/en/mysqli.real-escape-string.php
转义函数添加斜杠'\'以转义可用于终止有效查询STRINGS(而不是查询本身)的字符以防止注入。 stripslashes函数用于删除这些斜杠,但是它们在构建查询字符串时没有实际用途,因为它们会删除所需的斜杠。
来自MySQL的结果不会被“削减”(转义),因此在处理结果时不需要使用striplashes。