我已经做了很多阅读,仍然不理解100%SQL注入的发生方式!
我希望从那些知道基于我的示例的SQL注入的具体示例中看到,因此可以对其进行复制,测试和修复。我试过SQL注入我的代码而不能,所以我希望有人来证明我的意思!
1.我认为SQL注入只能通过POST或GET方法进行,这意味着在网站上它应该是post表单,例如'注册或搜索'或查询'search.php?tags = love'?
说这可以注入以下具有POST方法的代码吗?
$name = trim($_POST['username']);
$mail = trim($_POST['email']);
$password = trim($_POST['password ']);
if ($errors == "false") {
$sql =
"INSERT INTO
clients
SET
name='" . mysql_real_escape_string($name) . "',
mail='" . mysql_real_escape_string($mail) . "',
password='" . mysql_real_escape_string(sha1($password)) . "'";
$connection->execute($sql);
}
2.另一个有GET方法:rate.php?like&videoID=250&userID=30
$sql =
"SELECT
videoID
FROM
likes
WHERE
videoID = '" .mysql_real_escape_string($videoID). "' AND UID = '" .mysql_real_escape_string($userID). "' LIMIT 1";
$connection->execute($sql);
请帮助那些对主题感到自由但使用具体例子的人。
提前致谢,
IIIa族
答案 0 :(得分:9)
$_GET
,$_POST
,$_COOKIE
,$_REQUEST
或$_SERVER
数组中的值。但是,用户输入也可以来自各种其他来源,如套接字,远程网站,文件等。因此,您应该处理除常量之外的所有内容(如'foobar'
)< strong>作为用户输入。
在您发布的代码中,mysql_real_escape_string
用于编码(=转义)用户输入。因此代码是正确的,即不允许任何SQL注入攻击。
请注意,忘记拨打mysql_real_escape_string
非常容易 - 对于熟练的攻击者来说,一次就够了!因此,您可能希望使用现代PDO和prepared statements代替adodb。
答案 1 :(得分:2)
我最近一直在深入研究这个问题,并希望与其他人分享非常有趣的内容,从而使我的问题对每个人都更加完整和有益。