2016-09-05 108 views
0

我在這裏有點困惑。我有一個處理用戶登錄的表單和操作頁面。目前,我的操作頁面忽略了密碼的大小寫。無論您是使用小寫字母還是全部大寫字母作爲密碼,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> 
+6

聽起來像是你的密碼存儲在數據庫中的純文本。這些應該立即散列,如果不早的話。 –

+0

謝謝馬特。但我如何在訪問數據庫中散列密碼? – Foxlon

+0

您是否在「ColdFusion哈希密碼」上進行搜索?應該有很多例子。 – Leigh

回答

1

您應該保存密碼,無須轉換爲大寫或小寫。然後在登錄頁面檢查密碼時,應該以相同的方式比較它們。

默認情況下會進行比較而不更改大寫或小寫。

檢查您的服務器端代碼。

+0

謝謝你。但我仍然沒有得到它。密碼不會轉換爲小寫或大寫。例如,如果您的登錄密碼是愛,如果您輸入LOVE作爲登錄密碼,它仍會將您登錄。我該如何解決? – Foxlon

+0

SELECT用戶名,密碼 FROM RBS 其中username = '#用戶名#' 和口令= '#密碼1#' <! - 現在,歡迎用戶重定向到 「accessgranted.cfm」 ---> Foxlon

+2

@Foxlon:請不要張貼在評論的代碼,編輯你的問題,並將其添加有 – Andre

3

Access中的比較始終不區分大小寫。

所以查詢

SELECT foo FROM bar WHERE foo = 'HELLO' 

還將以foo = helloHello返回記錄。

但是:不管怎樣,你都不應該以明文存儲密碼。散列它們,問題就解決了。

+1

而且,總是用[cfqueryparam](https://helpx.adobe.com/coldfusion/cfml -reference/coldfusion-tags/tags-pq/cfqueryparam.html)。 – Leigh

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> 
+1

雖然技術上是正確的,[密碼不應以純文本形式存儲](http://security.stackexchange.com/questions/36833/why-should-因爲安全性原因,它們應該被散列,正如[Andre指出](http://stackoverflow.com/a/39350339/104223),這也有使情況變得非常好的副作用-issue ... – Leigh

+0

Thanks leigh。但是如何在訪問分區中存儲密碼? – Foxlon

+0

@maertsch,它的工作時間現在我想學習如何使用coldfusion哈希密碼。謝謝。 – Foxlon