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