我的密码验证不区分大小写

时间:2013-09-07 17:28:12

标签: php javascript passwords

这是一个只有用户名和密码的登录表单。它运作良好,但我希望我的信息区分大小写。例如,我的数据库用户名是: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>

我的错误在哪里?

2 个答案:

答案 0 :(得分:0)

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

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

混合案例密码及其为用户带来的不便使我们大多数人的速度变慢,并且在我们输入的方式上变得非常谨慎。我看到许多触摸打字员采用双指方式,因为在案件之间切换的尴尬(在大多数手机上更糟糕),使得它非常容易窥探。

答案 1 :(得分:-3)

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

md5()

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