'' 或者 1=1 #
这个执行语句现在是这个样子:
elect Username, Password FROM Users Where Username = '' or 1=1 #' and Password
= '';
散列符号(#)告诉MySQL的它之后一切,都会被忽略。 所以实际上只是执行的SQL到这
一点。 1永远等于1 ,所以SQL将从数据库返回所有的用户名和密码。 在大多数用户登录数
据库的首个户名和密码组合都是管理员用户, 他干脆输入了几个符号作为管理员已登录你
的网站, 果他们其实都知道的用户名和密码,他们会有同样的权力如。
一个小创意,上述情况可以进一步发挥,让用户建立自己的登录帐号, 阅读信用卡号
码,甚至删除数据库。
所幸的是,这种情况还是很容易避免。 通过检查要进入数据库的数据,并删除或取消
它们, 我们可以防止任何人在这个数据库上执行他们自己的SQL语句。 函数的方法如下:
function make_safe($variable) {
$variable = addslashes(trim($variable));
return $variable;
}
现在,修改了我们的执行语句。用_POST取代上面的执行变量, 我们现在把所有的用户
数据通过make_safe函数,在以下代码:
$username = make_safe($_POST['username']);
$password = make_safe($_POST['password']);
$check = mysql_query(“Select Username, Password, UserLevel FROM Users Where
Username
= ’”.$username.“‘ and Password = ’”.$password.“‘”);
现在,如果一个用户输入恶意的上述数据,查询看上去像下面这样,是完全无害。 以
下查询将选择从数据库中的用户都和“\' or 1=1 #”相等的。
Select Username, Password, UserLevel FROM Users Where Username