【问题标题】:mysql_real_escape_string reversal? [duplicate]mysql_real_escape_string 反转? [复制]
【发布时间】:2012-10-22 01:58:40
【问题描述】:

可能重复:
PHP mysql_real_escape_string() -> stripslashes() leaving multiple slashes

我的系统接受用户对调查的输入并将答案保存到 MySQL 数据库。
在将其放入此数据库之前,它会通过mysql_real_escape_string() 运行它以验证它不是对注入不满意。

不幸的是,当我在文本框中将此内容输出到我的客户时(就像输入一样)引号单引号 / \ ......所有都被转义了 - 我知道我知道我要求它,但我不能像这样给出产品 - 我如何在不冒丢失人们输入“2\3, 1\2”的风险的情况下反转这些......类似的东西。

有没有更好的消毒方法?

【问题讨论】:

  • 您是否可以启用魔术引号?见这里:stackoverflow.com/a/1201003/281469
  • magic quotes 已开启,即使我之前将其关闭 - 我的虚拟主机现在每次重置我的设置时都会更改我的服务器 3 次 - 明年有人将获得新的虚拟主机 :-)跨度>

标签: php mysql mysqli


【解决方案1】:

有一种更好的方法可以确保您的输入得到净化。不要逃避,而是使用prepared queriesPDO

【讨论】:

  • 这有什么帮助?损坏已经造成,OP 正在询问如何修复它。
  • 他问“有没有更好的消毒方法。”
  • 仅提及 PDO 就获得了多少票,这真是太疯狂了。
  • @jeffrey PHP 通常是新程序员的首选。不幸的是,它(可以说)是给程序员最频繁引入安全漏洞的机会的语言。 PDO 的答案绝对应该被赞成!
【解决方案2】:

如果你的 MySQL 字符串有 myfield="Stafford\'s webhost sucks" 之类的东西,MySQL 知道反斜杠是作为转义字符而不是反斜杠,除非它是双转义的。

如果您在数据库中看到本应是转义字符的反斜杠,则表示您的字符串被多次转义。这可能在您的代码中,或者在您的情况下,打开了已弃用的魔术引号功能。可以通过 php.ini 关闭魔术引号:https://stackoverflow.com/a/1201003/281469

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-15
    • 2012-01-16
    • 2013-04-17
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2014-06-13
    相关资源
    最近更新 更多