gpt4 book ai didi

mysql - 单引号用两个单引号转义时的SQL注入(inject)

转载 作者:行者123 更新时间:2023-11-29 01:21:05 29 4
gpt4 key购买 nike

当单引号被两个单引号转义时,有没有办法进行SQL注入(inject)?我知道 MySQL 服务器正在使用这种特定技术来防止攻击。我正在尝试以特定用户身份登录,但我为密码尝试的所有常见注入(inject)均未成功(即 ' or '1'='1, ' or ' 1=1, etc.)。

最佳答案

不,是的。

如果所提供的值通过在单引号前加一个额外的单引号来“转义”,则无法使不安全值“突破”单引号内的文字值。

也就是说,假设您的语句保证字符串文字包含在引号中,作为“静态”SQL 文本的一部分。

例如 perl-ish/php-ish

$sql = "...  WHERE t.foo = '" . $safe_value . "' ... ";
^ ^

我在这里强调,将文字括起来的单引号是 SQL 文本的一部分。如果 $safe_value 已通过在“不安全”值中的每个单引号前加上另一个值使其“安全”而被“转义”...

$unsafe_value  $safe_value
------------- ------------
I'm going I''m going
'she''s' ''she''''s''
1'='1 -- 1''=''1 --

只要转义处理得当,我们保证潜在不安全的值通过转义运行,那么在数据值中包含单引号并不是用 SQL 文本“突破”文字的可行方法。

这是答案的“否”部分。

答案的"is"部分。

最大的问题之一是确保在任何地方都这样做,并且没有在某个地方犯错误,假设一个潜在的不安全字符串是“安全的”,并且没有被转义。 (例如,假设从数据库表中提取的值是“安全的”,并且在将它们包含在 SQL 文本中之前不对它们进行转义。)

此外,单引号技巧不是 SQL 注入(inject)的唯一途径。代码仍然可能存在漏洞。

首先,如果我们不注意语句的其他部分,例如包含字符串文字的单引号。或者,例如,如果代码要在将 $sql 提交到数据库之前通过其他函数运行:

$sql = some_other_function($sql);

some_other_function 的返回值可能会返回实际上易受攻击的 SQL 文本。 (举个荒谬的例子,some_other_function 可能会用一个单引号替换所有出现的两个连续单引号。DOH!)

此外,由于存在大量可能的 unicode 字符,如果我们在进行字符集转换时,也有可能将某些 unicode 字符映射到单引号字符。我没有任何具体的例子,但是在某个地方,在过多的多字节编码中,有一些 unicode 字符会在某个目标中被翻译成单引号。

源中未映射的字符在目标中有一个默认字符,通常是问号(或黑色菱形中的白色问号)。如果目标中的默认字符(对于源中未映射的字符)是单引号。

底线:通过用两个单引号替换单引号来转义不安全的字符串,对于调解(缓解?)SQL 注入(inject)漏洞大有帮助。但就其本身而言,它并不能保证代码不会以其他方式受到攻击。

关于mysql - 单引号用两个单引号转义时的SQL注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28246744/

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