如果密码空间为空,可以使用任何用户名登录,硬编码php登录表单


Able to login with any username if password space is blank, hardcoded php login form

我的问题是,如果您将密码空间留空并键入任何用户名,例如"potato",如果密码空间为空,则登录仍然有效。代码应该被硬编码为两个用户名和密码,我想这一行有问题,但不知道是什么。

if (isset($logins[$Username]) == $Password){

这是完整的代码:

<?php
session_start(); /* Sessionen påbörjas här */
/* Submit för formuläret */
if(isset($_POST['Submit'])){
/* Tillgängliga lösenord och användarnamn */
$logins = array('Mattias' => '1','Mikael' => '2',);
/* Kolla och ge lösenord och användarnamn en ny variabel */
$Username = isset($_POST['Username']) ? $_POST['Username']:' ';
$Password = isset($_POST['Password']) ? $_POST['Password']:' ';
/* Kolla lösenord och användarnamn */
if (isset($logins[$Username]) == $Password){
    /* Vid lyckat försök skicka vidare till den lösenordsskyddade sidan    */     
    $_SESSION['UserData']['Username'] = $Username;
    header("Location:../admin/index.php");
    exit();
} else {
    /* Meddelande för fel lösenord/användarnamn */
    $felmeddelande = "<span style='color:red;'>Fel användarnamn eller   lösenord</span>";
}
}
?>

现在尝试了这个,但仍然不起作用。。有什么想法吗?任何人

    if($logins[$_POST['Username']] == $_POST['Password']){

有人能回答这个问题吗?急需帮助。。

它是完美的

if(isset($logins[$Username]))
{
    if ($logins[$Username] == $Password){
    /* Vid lyckat försök skicka vidare till den lösenordsskyddade sidan    */     
    $_SESSION['UserData']['Username'] = $Username;
    header("Location:../admin/index.php");
    exit();
    } else {
    /* Meddelande för fel lösenord/användarnamn */
    $felmeddelande = "<span style='color:red;'>Fel användarnamn eller   lösenord</span>";
    }
}

另一个答案中提供的代码确实有效(但并非完美,未定义的索引可能会出现,并且您的用户名不考虑大小写敏感性("Mattias"会有效,但"Mattias"不会)),但我决定发布一个答案,进一步解释为什么他的有效,而您的无效。

你的问题是这条线

if (isset($logins[$Username]) == $Password){

因为isset()会返回一个布尔值(true/false),并且不能根据字符串检查布尔值。这里真正发生的情况是,您输入一个有效的用户名,语句将读取true == true,返回true。您已经指定了$logins,因此不需要检查它是否已设置。

如果用户名与数组中提供的用户名不完全相同,您也会遇到问题(根据另一个答案和您的解决方案,它区分大小写)。

稍微修改一下,您的代码会是这样的(假设$logins-数组中的所有名称都有小写字母,但以大写字母开头)

if (isset($_POST['Submit'])) {
    /* Tillgängliga lösenord och användarnamn */
    $logins = array('Mattias'=>'1', 'Mikael'=>'2');
    /* Kolla och ge lösenord och användarnamn en ny variabel */
    $Username = isset($_POST['Username']) ? ucfirst(strtolower($_POST['Username'])) : '';
    $Password = isset($_POST['Password']) ? $_POST['Password'] : '';
    /* Kolla lösenord och användarnamn */
    if (isset($logins[$Username]) && $logins[$Username] == $Password) {
        /* Vid lyckat försök skicka vidare till den lösenordsskyddade sidan    */     
        $_SESSION['UserData']['Username'] = $Username;
        header("Location: ../admin/index.php");
        exit;
    } else {
        /* Meddelande för fel lösenord/användarnamn */
        $felmeddelande = "<span style='color:red;'>Fel användarnamn eller lösenord</span>";
    }
}

我已经测试了这段代码,它确实有效,不会产生任何错误或警告(因为我无论如何都可以测试),但如果你在实现它时遇到问题,请大声说出来,我会尽我所能提供帮助。

false的三元运算符中也有一个空格,这并不重要,但(在我看来)它应该只是一个空白字符串。