mysql_real_escape_string()到底做了什么?

2022-08-30 10:07:19

有时我讨厌文档的一件事(当你是初学者时)是它如何没有真正用英语描述事物。有人介意为我翻译这个文档吗?我想知道这究竟是如何使黑客更难插入字符的。

http://php.net/manual/en/function.mysql-real-escape-string.php

另外,如果是这种情况,黑客如何尝试插入字符?


答案 1

该函数在传递给函数的字符串中的某些潜在危险字符之前添加一个转义字符,即反斜杠 \。转义的字符是

\x00、\n、\r、\、'、“ 和 \x1a。

这可以帮助防止 SQL 注入攻击,这些攻击通常是通过使用 ' 字符将恶意代码附加到 SQL 查询来执行的。


答案 2

假设您要将字符串保存在数据库中。
您的查询将类似于 。
替换变量后,将如下所示:I'm a "foobar"INSERT INTO foos (text) VALUES ("$text")$text

INSERT INTO foos (text) VALUES ("I'm a "foobar"")

现在,字符串究竟在哪里结束?您可能知道,SQL解析器不会。这不仅会简单地破坏此查询,还可能被滥用以注入您不想要的SQL命令。

mysql_real_escape_string通过转义对 SQL 解析器具有特殊意义的字符来确保不会发生此类歧义:

mysql_real_escape_string($text)  =>  I\'m a \"foobar\"

这变成了:

INSERT INTO foos (text) VALUES ("I\'m a \"foobar\"")

这使得声明明确且安全。以下字符不被其作为字符串终止符的特殊含义所采用的信号。有几个这样的角色可以照顾。\mysql_real_escape_string

在编程语言BTW中,转义是一件非常普遍的事情,都是一样的。如果你想在PHP中字面上输入上面的句子,你也需要出于同样的原因转义它:

$text = 'I\'m a "foobar"';
// or
$text = "I'm a \"foobar\"";

推荐