6

可能重复:
在 mysql_real_escape_string 之后使用带斜杠

我最近一直在阅读有关预防 SQL 注入的内容,并且我正在尝试在不同功能之间建立一些理解,以便我可以学习基础知识。

我已经阅读mysql_real_escape_string并了解它基本上是转义它认为“特殊”的字符,以便它不会与 SQL 语法混淆?

现在,假设这至少在某种程度上是正确的 - 是否需要将该stripslashes函数与mysql_real_escape_string? 我想知道它是什么stripslashes以及它的用途。

4

4 回答 4

12

如果stripslashes在 using 之后立即使用 on 输入mysql_real_escape_string,您将有效地撤消它。使用 可能还有其他原因stripslashes,但就我而言,我只需要它来消除魔术引语的恐怖。它实际上是相反的addslashes

addslashes不一定像那样转义输入mysql_real_escape_string,并且它们不能用于相同的目的。

甚至更好的是mysql_*,您应该阅读使用准备好的语句,如 in PDO。然后你甚至不必担心mysql_*or stripslashes(魔术引号除外)。

于 2012-12-13T06:00:22.753 回答
4

该函数stripslashes()将取消转义用反斜杠转义的字符,\. 它通常用于通过 转义的字符串addslashes(),或者如果您的 PHP 配置已magic_quotes启用。

当使用 SQL 转义函数时mysql_real_escape_string(),不需要使用stripslashes(),因为 MySQL 适配器只会在插入数据库时​​转义值 - 斜杠不会保留在实际值中。如果您要stripslashes()在已经使用 转义的变量上使用mysql_real_escape_string(),它将删除斜杠,就好像它是使用转义的一样addslashes()- 虽然毫无意义。

如果您的目标是防止 SQL 注入,我强烈建议您研究与旧方法相反的MySQLiPDO 。mysql_MySQLi 和 PDO 都提供准备好的语句,如果使用得当,可以防止 SQL 注入,而无需记住调用特殊的转义函数担心您的数据是否会被修改。

于 2012-12-13T06:01:10.790 回答
1

stripslashes 函数用于Un-quotes a quoted string

例子 :

<?php
echo stripslashes("how\'s going on?");
?>

上面代码的输出将是:

how's going on?

更多细节:

http://php.net/manual/en/function.stripslashes.php

于 2012-12-13T06:02:31.290 回答
1

查看

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 的结果不是“斜线”(转义),因此在处理结果时不需要使用斜线。

于 2012-12-13T06:12:18.983 回答