如何防止 PHP PDO 通过 jQuery AJAX 插入 MySQL varchar 中的转义字符

Posted

技术标签:

【中文标题】如何防止 PHP PDO 通过 jQuery AJAX 插入 MySQL varchar 中的转义字符【英文标题】:How to prevent escape characters in MySQL varchar inserted by PHP PDO via jQuery AJAX 【发布时间】:2012-11-04 16:53:38 【问题描述】:

我觉得我在这上面找不到任何东西很奇怪,但事实就是这样。

在我的网站上,我允许用户输入要存储在我的数据库中的文本。我使用 PDO 来保证它的安全,但是所有危险字符前面都有“\”。

有没有一种简单的方法可以摆脱这一切?我应该在 mysql 中使用不同的数据类型吗?

提前致谢!

没有双重转义。懒惰阻止了它

我读到,直接做 PDO 就可以了,所以您不必担心逃逸、消毒、漂白、擦洗等...

我像 How do I insert into PDO (sqllite3)? 那样做标准的 PDO INSERT

数据通过jQuery ajax传输。这是问题的根源吗?如果是这样,我该如何扭转它?

感谢您的帮助!

具体问题

我在引号和双引号前只有“\”。谢谢!

版本

用于 Zend Guard 兼容性的 php 5.3。 MySQL 5.5。阿帕奇 2.2.2。 jQuery 1.8.3

+1 反转

我会给出尽可能多的 +1 作为关于如何反转这些 / 的答案。谢谢!

魔术行情

就是答案。有人想延长他们的答案以供检查吗?

仍在寻找 SQL 语句来反转先前的转义。谢谢!

【问题讨论】:

危险人物长什么样子? :D big bad "'"s 和 """s。它们太锋利了。它们将我的数据库切成碎片。哈哈,感谢您的关注! 您是否有可能使用启用了magic quotes 的旧版PHP? phpinfo() 应该会告诉您它是否已启用。我认为控制magic_quotes_gpc(最可能的罪魁祸首)的唯一方法是在你的php.ini中。 如果您已通过 phpinfo 验证魔术引号是问题所在,您可以将此链接提供给有权访问您服务器上的 php.ini 文件的任何人:php.net/manual/en/security.magicquotes.disabling.php 请注意,如果其他该框上的代码依赖魔术引号来转义用户输入,这可能会导致错误或安全漏洞。 【参考方案1】:

这可能是因为在服务器上启用了magic quotes。特别是,它可能是magic_quotes_gpc 指令,可以在php.ini.htaccess 等中设置,但不能在运行时使用ini_set

首先,仔细检查phpinfo() 的输出以确保这是问题所在。如果您发现魔术引号已启用,则需要有权访问服务器的人在您的 php.ini.htaccess 文件中禁用它。 php手册在这里解释了这个过程:http://www.php.net/manual/en/security.magicquotes.disabling.php

但请注意这一点:如果服务器上运行的代码依赖于魔术引号,禁用它可能会使这些网站容易受到 sql 注入等攻击。

【讨论】:

不能编辑php.ini的可以尝试在.htaccess中添加:php_flag magic_quotes_gpc off【参考方案2】:

在应用程序到达 PDO 层之前,您显然已经在应用程序中进行了一些其他转义。寻找 addslashesescape_string 类型的方法调用,看看你是否已经完成了。

你看到的是双重转义的迹象。

【讨论】:

以上是关于如何防止 PHP PDO 通过 jQuery AJAX 插入 MySQL varchar 中的转义字符的主要内容,如果未能解决你的问题,请参考以下文章

PHP关于PDO防止XSS攻击

使用 mysql PDO 防止sql注入

如何通过 PHP 和 Linux 使用 pdo 连接到 mssql?

PDO防止SQL注入具体介绍

PHP 防止 SQL 注入

php部分---PDO;