我正在构建一个故意有缺陷的应用程序,以进行演示。它很容易表现出不当行为,并可能鼓励那些会利用它的人。服务器上有足够的日志记录,因此我们可以查看何时有人戳。我只需要一个简单的登录页面,该页面使用PHP
脚本连接到SQL
数据库。我可以通过SQL Server日志验证连接性,但是,当我知道输入的密码和用户名正确时,脚本将返回并显示“无效密码”。
我尝试从其他资源/我所知道的交换掉一些代码,然后得到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!";
}
我希望连接能够正常工作,而只是抛出“我的用户名或密码错误!”。声明
答案 0 :(得分:-1)
编写脚本的方式不正确。要检查用户名和密码是否正确,我不会检查是否有行。我知道这不是真实的,它的意思是显示不好的脚本/编码/等,但这确实很糟糕。它不断为您提供“错误的用户名或密码!”的原因!是因为没有返回任何行。尝试像这样重写脚本:
<?php
// Connect to Database Server
$server = "serverName\sqlexpress";
$connectionInfo = array("Database" => "dbName", "UID" => "username", "PWD" => "password");
$conn = sqlsrv_connect($server, $connectionInfo);
// POST variables
$user = $_POST['user'];
$pass = $_POST['pass'];
$query = 'SELECT * FROM login WHERE `user` = "' . $user . '" AND `pass` = "' . $pass . '"';
// Query Login
$statement = sqlsrv_query($conn, $query);
if ($statement) {
$rows = sqlsrv_has_rows($statement);
if ($rows === true && $rows >= 1) {
header('Location: landing.html');
} else {
echo "Wrong username or password!";
}
} else {
die(print_r(sqlsrv_errors(), true));
}