mysql_real_escape_string() 对于 MySQL REGEXP 是否足够?

发布于 2024-11-16 22:38:05 字数 298 浏览 0 评论 0原文

是否可以选择以下代码中的 $user_input 来使 MySQL 查询不按预期运行?

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

我无法使用准备好的语句,因为 SQL 字符串需要稍微传递一下。

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

Could $user_input in the following code be chosen to make the MySQL query not behave as expected?

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

I can't use prepared statements, since the SQL string needs to be passed around a bit.

Edit: I'll add that I'm already aware of regex DoS attacks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

抽个烟儿 2024-11-23 22:38:05

此查询:

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

不能被破坏以执行除 SELECT 之外的操作(我用单引号替换了双引号,因为 double 是仅 mysql 的扩展)。

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

This query:

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

cannot be subverted to do things other than SELECT (I replaced the double quotes with single, since double are a mysql-only extension).

However, if the regexp itself is not in your immediate control, the user might select anything with it -- you should consider the possibility of that being a problem.

ゝ偶尔ゞ 2024-11-23 22:38:05

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

如果你传递 $link_identifier 的话,你会更高效(也更安全),因为 PHP 必须知道有关数据库的信息才能正确转义(例如编码)。
所以这个函数并不是简单地转义字符串,而是询问mysql如何正确地完成它。

因此,传递链接标识符可确保您的字符串针对其预期的数据库正确转义。

No, you're safe there (except for the regex, which can be anything of course).

You would be more efficient (and secure) if you passed the $link_identifier though, because PHP has to know stuff about the database in order to properly escape (encoding for example).
So this function does not simply escape the string, but asks mysql how to properly do it.

So passing the link identifier ensures that your string is correctly escaped for the database it is meant for.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文