mysql_real_escape_string()是否足以支持MySQL REGEXP?

时间:2011-06-25 17:45:03

标签: php mysql regex mysql-real-escape-string

可以选择以下代码中的$user_input来使MySQL查询的行为不符合预期吗?

<?
$regexp = mysql_real_escape_string( $user_input );
mysql_query( "SELECT col FROM table WHERE col REGEXP \"$regexp\"" );
?>

我不能使用预准备语句,因为SQL字符串需要传递一点。

编辑:我要补充一点,我已经知道正则表达式DoS攻击。

2 个答案:

答案 0 :(得分:4)

此查询:

mysql_query("SELECT col FROM table WHERE col REGEXP '$regexp'");

不能被破坏做除了SELECT以外的事情(我用双引号代替双引号,因为double是一个只有mysql的扩展名。)

但是,如果正则表达式本身不在您的直接控制之下,那么用户可能会选择任何内容 - 您应该考虑这可能是一个问题。

答案 1 :(得分:3)

不,你在那里是安全的(除了正则表达式,当然可以是任何东西)。

如果你传递$ link_identifier,你会更有效率(也更安全),因为PHP必须知道有关数据库的内容才能正确转义(例如编码)。 所以这个函数不是简单地转义字符串,而是要求mysql 如何正确地执行它。

因此,传递链接标识符可确保您的字符串正确地为其所针对的数据库进行转义。