【问题标题】:What's the meaning of following ereg_replace?跟随ereg_replace是什么意思?
【发布时间】:2011-05-09 10:26:49
【问题描述】:

我在一个反sql注入例程中看到了这行,那么它是什么意思呢?

ereg_replace('(%)', '\\\1', $str);

【问题讨论】:

  • 一旦你对ereg_replace有了很好的理解,你应该立即转移到preg_replaceereg 函数现已过时。

标签: php sql regex sql-injection


【解决方案1】:

它通过将% 替换为\% 来转义百分号。 PHP有更好的转义字符的方法,即addcslashes:

addcslashes($str, '%');`

另请注意,不推荐使用 ereg 函数系列,取而代之的是它们的 preg 等效函数。

【讨论】:

  • 为什么要用\%代替%?该例程已经调用了real_escape_string,实际上它添加了这行代码然后将自己称为super_escape_string。
  • @Jichao 因为% 在 SQL 查询中具有特殊含义(它就像用于模式匹配的通配符),而 \% 始终是文字百分号。
  • 我同意参数化语句的建议。但是,mysql_real_escape_string 不处理 %(参见最后一条注释)。对于准备好的语句,它可能取决于库。不过,我并不是说正则表达式是正确的(它肯定过于冗长)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 2015-05-14
相关资源
最近更新 更多