我正在使用PHP的数据库登录系统,但是我的一个用户的密码中有一个感叹号打破了它,它所说的行($ password = $ _GET [' p&# 39;];)是密码传递的地方
$username = $_GET['u'];
$password = $_GET["p"];
function userLoginIpb($username, $password) { //select the password information froms elected user
$query = mysqli_query($GLOBALS["___mysqli_ston"], "SELECT `members_pass_salt`, `members_pass_hash` FROM `members` WHERE `name` = '$username'");
$results = mysqli_fetch_assoc($query);
$password = md5(md5($results['members_pass_salt']).md5($password));
if ($password == $results['members_pass_hash']) {
return true;
} else {
return false;
}
答案 0 :(得分:0)
问题在于您的$_GET[]
请求,因为!
字符将被编码为%21
。
由于您正在使用该系统,请以正确的方式进行操作。
password_hash()
和password_verify()
,因为它们有一个盐构建,使其非常安全且易于使用。pass; DROP TABLE members;
之类的密码会破坏它。答案 1 :(得分:0)
您需要使用mysqli_real_escape_string
:
<?php
$username = $_GET['u'];
$password = $_GET["p"];
// select the password information froms elected user
function userLoginIpb($username, $password)
{
global $___mysqli_ston;
$s = mysqli_real_escape_string($___mysqli_ston, $username);
$query = mysqli_query($___mysqli_ston, "SELECT `members_pass_salt`, `members_pass_hash` FROM `members` WHERE `name` = '$s'");
$results = mysqli_fetch_assoc($query);
$password = md5(md5($results['members_pass_salt']).md5($password));
return $password == $results['members_pass_hash'];
}
另请查看PDO
。