设置严格的密码规则

时间:2016-09-05 18:41:20

标签: ms-access coldfusion passwords

我在这里有点困惑。我有一个表单和操作页面来处理用户登录。目前,我的操作页面忽略了密码的大小写。无论您使用小写字母还是全部大写字母,只要值正确,action.cfm页面就会将您登录。如果使用正确的密码,我希望它只能登录。我该如何解决这个问题?

形式:

<form name="login" target="_self" method="POST" action="action.cfm">
   Username: <input name="UserName" type="text"><br/>
   Password: <input name="Password" type="password"><br/>
   <input name="" type="submit" value="Login">
</form>

action.cfm:

<cfquery name="qVerify" datasource="me.mdb"> 
    SELECT  UserName, Password 
    FROM    rbs 
    WHERE   UserName = '#UserName#' 
    AND     Password = '#Password1#' 
</cfquery> 
<cfif qVerify.RecordCount> 
    <cfset session.allowin = "True"> 
    <!--- Now welcome user and redirect to "accessgranted.cfm" ---> 
    <CFLOCATION URL="successful.html"> 
<cfelse> 
    <script> 
    alert("ACCESS NOT GRANTED. CHECK YOUR LOGIN PARAMETERS."); 
    self.location="loginpage.html"; 
    </script> 
</cfif>

3 个答案:

答案 0 :(得分:3)

Access中的比较始终不区分大小写。

所以查询

SELECT foo FROM bar WHERE foo = 'HELLO'

还会返回foo = helloHello的记录。

但是:无论如何,你不应该以明文存储密码。哈希他们,问题解决了。

答案 1 :(得分:1)

您应该保存密码而不转换为大写或小写。然后在登录页面中检查密码时,您应该以相同的方式对它们进行比较。

默认情况下,比较将在不改变大小写的情况下完成。

检查服务器端代码。

答案 2 :(得分:0)

您的表格排名似乎不区分大小写。

以区分大小写的方式使用ColdFusion检查密码。例如,函数compare()是区分大小写的,而compareNoCase()是不区分大小写的。如果字符串相等,Compare()返回0。

您的代码如下所示:

<cfquery name="qVerify" datasource="me.mdb"> 
    SELECT  UserName, Password 
    FROM    rbs 
    WHERE   UserName = <cfqueryparam value="#form.UserName#">
    AND     Password = <cfqueryparam value="#form.Password#">
</cfquery> 
<cfif qVerify.RecordCount and compare(qVerify.username, form.username) eq 0 and compare(qVerify.password, form.password) eq 0> 
    <cfset session.allowin = "True"> 
    <!--- Now welcome user and redirect to "accessgranted.cfm" ---> 
    <CFLOCATION URL="successful.html"> 
<cfelse> 
    <script> 
    alert("ACCESS NOT GRANTED. CHECK YOUR LOGIN PARAMETERS."); 
    self.location="loginpage.html"; 
    </script> 
</cfif>