当我知道正确无误时,PHP脚本会说“无效密码”

时间:2019-07-24 20:53:52

标签: php html sql-server

我正在构建一个故意有缺陷的应用程序,以进行演示。它很容易表现出不当行为,并可能鼓励那些会利用它的人。服务器上有足够的日志记录,因此我们可以查看何时有人戳。我只需要一个简单的登录页面,该页面使用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!";
}

我希望连接能够正常工作,而只是抛出“我的用户名或密码错误!”。声明

1 个答案:

答案 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));
}