在我正在研究的应用程序中,我发现了一个弱逃逸函数来防止注入.我试图证明这一点,但我在提出一个简单的例子时遇到了麻烦.
escape函数的工作原理如下(PHP示例).
function escape($value) {
$value = str_replace("'","''",$value);
$value = str_replace("\\","\\\\",$value);
return $value;
}
Run Code Online (Sandbox Code Playgroud)
我意识到这不涉及使用双引号(")编码的值,但所有查询都是使用单引号(')构造的.
谁可以打败这个逃脱功能?
要求:
简单的例子:
$sql = "SELECT id FROM users WHERE username = '" . escape($username) . "' AND password = '" . escape($password) . "'";
$sql = "UPDATE users SET email = '" . escape($email) . "' WHERE id = '" . escape($id) . "'";
Run Code Online (Sandbox Code Playgroud) mysql_real_rescape_string()是否足以保护我免受黑客和SQL攻击?问,因为我听说这些对所有攻击媒介没有帮助?寻找专家的意见.
编辑:另外,LIKE SQL攻击怎么样?
有些人认为mysql_real_escape_string()有一些缺陷,即使正确使用也无法保护您的查询.
将一些化石制品作为证据.
所以,问题是:mysql [i] _real escape_string()是完全不可接受的吗?
或者是否仍然可以使用此函数来创建自己的预备语句?
请提供验证码.