SQL-安全方法
SQL-safe method
上下文: 我正试图说服朋友改用参数化查询来防止 SQL 注入和其他恶意尝试,因为这是当今的标准但他的心态是“没坏就别修”
这是他目前使用的代码:
function sql_safe($text) {
return str_replace("'", "''", $text);
}
有没有办法让我打破这个功能,向他说明这种做法不再可取?
附加信息
它被用作保护系统免受 SQL 注入的一般手段,以便正确转义用户输入。但我觉得他的方法在某些我还没有弄清楚的情况下可能会失败。
这是您的代码:
<?php
function sql_safe($text) {
return str_replace("'", "''", $text);
}
echo "SELECT * FROM db WHERE field = '" . sql_safe($argv[1]) . "';\n";
这是打破它的最明显的方法:
$ php ./x.php "\' OR TRUE; -- MySQL"
SELECT * FROM db WHERE field = '\'' OR TRUE; -- MySQL';
Stack Overflow 多年来广泛涵盖了 SQL 注入的主题。参见例如 Can I protect against SQL Injection by escaping single-quote and surrounding user input with single-quotes? 。那里有一个巧妙的技巧,利用 "maximum length of string" 只截断一个替换 ''
s.
上下文: 我正试图说服朋友改用参数化查询来防止 SQL 注入和其他恶意尝试,因为这是当今的标准但他的心态是“没坏就别修”
这是他目前使用的代码:
function sql_safe($text) {
return str_replace("'", "''", $text);
}
有没有办法让我打破这个功能,向他说明这种做法不再可取?
附加信息
它被用作保护系统免受 SQL 注入的一般手段,以便正确转义用户输入。但我觉得他的方法在某些我还没有弄清楚的情况下可能会失败。
这是您的代码:
<?php
function sql_safe($text) {
return str_replace("'", "''", $text);
}
echo "SELECT * FROM db WHERE field = '" . sql_safe($argv[1]) . "';\n";
这是打破它的最明显的方法:
$ php ./x.php "\' OR TRUE; -- MySQL"
SELECT * FROM db WHERE field = '\'' OR TRUE; -- MySQL';
Stack Overflow 多年来广泛涵盖了 SQL 注入的主题。参见例如 Can I protect against SQL Injection by escaping single-quote and surrounding user input with single-quotes? 。那里有一个巧妙的技巧,利用 "maximum length of string" 只截断一个替换 ''
s.