如何防止 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 层之前,您显然已经在应用程序中进行了一些其他转义。寻找 addslashes
或 escape_string
类型的方法调用,看看你是否已经完成了。
你看到的是双重转义的迹象。
【讨论】:
以上是关于如何防止 PHP PDO 通过 jQuery AJAX 插入 MySQL varchar 中的转义字符的主要内容,如果未能解决你的问题,请参考以下文章