如果密码中有符号的“'&[closed],则无法登录

问题描述 投票:-3回答:1

我是PHP的新手,我遇到了很大的问题,让我感到压力,我用数据库中的SHA1加密我的列密码。在我的栏中,密码有很多密码。

但不是所有密码都可以登录我的应用程序,例如我有密码

  1. 9Wg-9Vk +(成功登录)
  2. 1Qb“ 8Tc $(登录失败)
  3. 9Qz&3Kd $(登录失败)
  4. 4Ao'5Al'(登录失败)

当我分析那是密码时,我认为问题出在诸如“'之类的符号上,而无法在我的代码中检测到。

因此,sha1($ pass)== $ passwd,不执行。我认为

或任何人有任何想法吗?

这是我的代码。

if (isset($_POST['user']) && isset($_POST['pass'])) {
$user = val_input(mysqli_real_escape_string($conn, filter_input(INPUT_POST,'user',FILTER_SANITIZE_EMAIL)));//($_POST['user'])));
$pass = val_input(mysqli_real_escape_string($conn, filter_input(INPUT_POST,'pass', FILTER_SANITIZE_STRING)));// val_input($_POST['pass'])));
$userpas = $conn->query("SELECT * FROM userid WHERE email = '".$user."' && password = '".sha1($pass)."' ");
//$cekuser = mysqli_num_rows($conn, $userpas);
$login = $userpas->fetch_object();
if(isset($login->email) && $login->email == $user) {

            $idusers = $login->username;
            $usernm = $login->email;
            $passwd = $login->password;
            $groups = $login->kriteria;
            $verikasicode = $login->verifikasicode;
            $verifikasistatus = $login->verifikasistatus;

        if (($user == $usernm) && (sha1($pass) == $passwd) &&
                ($verikasicode == 'verified') && ($verifikasistatus == '1')) {
                $msg('Success Login')
                exit;
        } else {
                $msg = 'Failed Login';
        }
} else {
     $msg = 'Failed Login';
}
php encryption mysqli synchronization sha1
1个回答
-2
投票

[php中有一些方法可以忽略该问题或解决该问题,但是我使用filter_input()方法中的更多方法来忽略此问题。有一个示例,您可以在代码中使用]

$passwd = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_SPECIAL_CHARS);

[请记住,当您要将数据存储在数据库中并将其用于所有输入时,必须使用此方法,但是在您的情况下,您可以像这样使用addslashes()

$passwd = addslashes($login->password);

在第一次隔离中,您的数据变得安全了。最好先过滤该字符,然后再将其存储在数据库中

© www.soinside.com 2019 - 2024. All rights reserved.