0

这是一个只有用户名和密码的登录表单。它运作良好,但我希望我的信息区分大小写。例如,我的数据库用户名是:David 和密码:PooPoo。虽然如果我插入用户名:daVid 和密码:PoOPOo 它会解析表单。

我的代码如下所示:

<?php 
    session_start();
    if (isset($_SESSION["manager"])) {
        header("location: index.php"); 
        exit();
    }
?>
<?php 
    if (isset($_POST["username"]) && isset($_POST["password"])) {

        $manager = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["username"]); 
        $password = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["password"]); 
        include "../storescripts/connect_to_mysql.php"; 
        $sql = mysql_query("SELECT id FROM admin WHERE username='$manager' AND password='$password' LIMIT 1"); // query the person
        $existCount = mysql_num_rows($sql); // count the row nums

        if ($existCount == 1) { // evaluate the count
             while($row = mysql_fetch_array($sql)){ 
                 $id = $row["id"];
             }
             $_SESSION["id"] = $id;
             $_SESSION["manager"] = $manager;
             $_SESSION["password"] = $password;
             header("location: index.php");
             exit();     
        }else{
            print '<script type="text/javascript">'; 
            print 'alert("wrong info")'; 
            print '</script>'; 
        }            
    }
?> 

我的验证脚本

<script type="text/javascript" language="javascript"> 
    function validateMyForm ( ) { 
        var isValid = true;
        if ( document.adminlogin.username.value == "" ) { 
            alert ( "Please enter your username" ); 
            isValid = false;
        } else if ( document.adminlogin.password.value == "" ) { 
            alert ( "Please enter password" ); 
            isValid = false;            
        }
        return isValid;
    }
</script>

请问我的错误在哪里?

4

2 回答 2

0

我认为这个错误首先是担心区分大小写。坚持密码区分大小写通常被夸大了。是的,它为给定长度的密码增加了强度,但增加该长度也是如此。在这两种情况下,密码都会变得更难记住,但混合大小写的密码可能更容易被窥探。

保持大写锁定是如此普遍,以至于许多登录屏幕(例如,Windows)现在都提供了一些警告。因为大写锁定打开而拒绝密码会在典型的 40 到 80 位中总共增加 1 位熵,但作为回报,它会让你旁边心怀不满的同事再有机会看到你输入它. 如果您正在输入“PooPoo”(键盘上相邻的 2 个字母),他们甚至可以通过听键盘点击或在触摸屏上寻找手指污迹来捕捉到这个。

混合大小写密码及其给用户带来的不便让我们中的大多数人放慢了速度,并且在输入时变得非常慎重。我见过许多触摸打字员采用两指方法,因为在案例之间切换很尴尬(在大多数手机上更糟),这使得监视变得超级容易。

于 2014-05-16T19:38:08.147 回答
-3

那么您应该使用 md5() 函数来存储您的用户密码(并在验证时执行相同的操作)。由于 md5() 本身是区分大小写的,它会自动完成这项工作。

md5()

有了这个,您将解决您的案例问题,并使您的密码存储更安全

于 2013-09-07T17:52:19.003 回答