e-6ren">
gpt4 book ai didi

php - 带有包含未转义通配符 '%'(百分比)或 '_'(下划线)的转义字符串的 mysql LIKE 语句是否易受攻击?

转载 作者:可可西里 更新时间:2023-11-01 07:35:28 27 4
gpt4 key购买 nike

假设我们有以下代码(用于某种搜索或类似搜索):

$stmt = $pdo->prepare("SELECT * FROM users WHERE username LIKE ?");
$stmt->execute(array('%' . $username . '%'));

提供的用户名已正确转义,但字符 %(= 0 个或更多任意字符)和 _(= 恰好 1 个任意字符)被解释为通配符通过 MySQL。

我知道用户可以输入 %_ 进行搜索,如果我希望搜索功能正常工作,我应该转义它。 (在像 set_pt 这样的情况下,在结果中得到 setopt)。

但我的问题是:有人可以利用它吗?如果是,有人如何利用它以及如何防止它?下面的函数是否足够?

function escape_like_string($str) {
return str_replace(Array('%', '_'), Array('\%', '\_'), $str);
}

我能想到的一种可能性是输入大量的 %,这样服务器就需要分配大量内存。这行得通吗?

最佳答案

Could someone exploit this?

对于 SQL 注入(inject)?没有。

对于类似复活节彩蛋的行为?大概。在这种情况下,如果您不想让您的用户在此搜索中使用通配符,您可以做两件事:

  1. 正确的转义通配符(和转义字符),

    str_replace(array('\\', '%', '_'), array('\\\\', '\\%', '\\_'), $str);
    // or:
    str_replace(array('|', '%', '_'), array('||', '|%', '|_'), $str);
    // with SELECT * FROM users WHERE username LIKE ? ESCAPE '|'
  2. 或使用 LOCATE(substr, str) > 0 查找精确匹配。

关于php - 带有包含未转义通配符 '%'(百分比)或 '_'(下划线)的转义字符串的 mysql LIKE 语句是否易受攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15476185/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com