SQL安全方法

时间:2017-01-16 20:57:20

标签: php sql-injection

背景信息:我试图说服朋友切换到使用参数化查询来防止SQL注入和其他恶意企图,因为这是现在的标准,但他有这种心态& #34; 如果它没有被破坏,请不要修理它。"

这是他目前使用的代码:

function sql_safe($text) {
    return str_replace("'", "''", $text);
}

我有没有办法打破这个功能,向他说明这种方法不再适用?我一直在尝试,但我不能自己打破它,所以现在我转向你们寻求帮助。

其他信息

它被用作保护系统免受SQL注入的一般手段,以便正确转义用户输入。但我觉得他的做法可能会在我尚未想到的某些情况下突破。

1 个答案:

答案 0 :(得分:3)

这是您的代码:

<?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?。在那里有一个巧妙的技巧,即利用&#34;字符串的最大长度&#34;仅截断替换''之一。