我在这里有点困惑。我有一个表单和操作页面来处理用户登录。目前,我的操作页面忽略了密码的大小写。无论您使用小写字母还是全部大写字母,只要值正确,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>
答案 0 :(得分:3)
Access中的比较始终不区分大小写。
所以查询
SELECT foo FROM bar WHERE foo = 'HELLO'
还会返回foo = hello
或Hello
的记录。
但是:无论如何,你不应该以明文存储密码。哈希他们,问题解决了。
答案 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>