【发布时间】:2010-11-19 23:42:15
【问题描述】:
我使用 SQL Inject Me Firefox 插件扫描了我的登录脚本
根据测试结果,我的脚本易受 SQL 注入攻击。示例结果
Results:
Server Status Code: 302 Found
Tested value: 1' OR '1'='1
Server Status Code: 302 Found
Tested value: 1' OR '1'='1
Server Status Code: 302 Found
Tested value: 1 UNI/**/ON SELECT ALL FROM WHERE
Server Status Code: 302 Found
Tested value: %31%27%20%4F%52%20%27%31%27%3D%27%31
我的脚本
- login.php - 登录表单
-
check-login.php - 检查登录细节,这里是代码。
$email = clean($_POST['username']); $pass = clean($_POST['password']); $user = "select * from tbl_admin where admin='$email' and pass='$pass'";
// 一些代码
$_SESSION['login_mes'] = "您已成功登录!"; header("位置:admin.php"); 退出();
} 否则 {
$_SESSION['login_mes'] = "电子邮件地址或密码无效,请重试。"; header("位置:login.php"); 出口(); }
登录失败时出现问题。如果我删除
} else {
$_SESSION['login_mes'] = "Invalid email address or password, please try again.";
header("Location:login.php");
exit();
}
SQL Inject Me 没有检测到故障以及如何修复这部分?
【问题讨论】:
-
clean函数有什么作用? -
一个附带问题 - PHP 中有参数化查询的概念吗?这可能值得研究。
标签: php mysql sql-injection