【发布时间】:2019-07-24 20:53:52
【问题描述】:
我正在构建一个故意存在缺陷的应用程序,用于工作演示。它很容易展示不正当的做法,并可能鼓励那些利用它的人这样做。服务器上有充足的日志记录,因此我们能够看到人们何时四处闲逛。我只需要一个简单的登录页面,它使用PHP 脚本连接到SQL 数据库。我可以通过 SQL 服务器日志验证连接性,但是,当我知道我输入的密码和用户名正确时,脚本会返回并显示“密码无效”。
我尝试从其他资源/我所知道的交换代码位,我得到了internal error 500
// POST variables
$user=$_POST['user'];
$pass=$_POST['pass'];
// MD5 hash
//$pass=md5($pass);
$sql = "SELECT * FROM login WHERE user = '$user' AND pass = '$pass'";
// Query Login
$stmt = sqlsrv_query($conn, $sql);
if( $stmt === false ) {
die( print_r( sqlsrv_errors(), true));
}
// Login validation
if(sqlsrv_has_rows($stmt)) {
header('Location: landing.html');
}
else {
echo "Wrong username or password!";
}
我希望连接能够正常工作,但它只是抛出了我的“错误的用户名或密码!”声明
【问题讨论】:
-
如果数据库中的密码当前是经过哈希处理的,那么问题是提交的密码在与数据库中的密码进行比较之前没有经过哈希处理。
-
您的代码容易受到 SQL 注入的攻击。您应该使用准备好的语句。
-
@Dharman 感谢您的 cmets,我将添加出口。至于漏洞,我完全清楚,这是故意的。
-
@Larnu 我认为 OP 没有说清楚,但他想展示安全漏洞和不良编程实践,而不是构建一个实际的可运行应用程序。
-
@Larnu 数据库不是真实的。我正在建立一个蜜罐。这是一个仅限内部的项目,旨在吸引有恶意的人。
标签: php html sql-server