如何在coldfusion中将密码作为散列插入Ms SQL?

问题描述:

我正在创建一个保存用户注册的表单。我想将密码作为散列或md5插入数据库。如何在coldfusion中将密码作为散列插入Ms SQL?

这是我的HTML表单很少的ColdFusion代码:

 <form id="myForm" class="ui form segment" method="post" action="registeraction.cfm"> 
     <p>Let's go ahead and get you signed up.</p> 

     <div class="field"> 
     <div class="field"> 
     <label>Name</label> 
     <input placeholder="Name" name="name" type="text"> 
     </div> 
     </div> 

     <div class="field"> 
     <div class="field"> 
     <label>Email</label> 
     <input placeholder="Email" name="email" type="email"> 
     </div> 
     </div> 

     <div class="field"> 
     <div class="field"> 
     <label>Password</label> 
     <input placeholder="Password" name="password" type="password"> 
     </div> 
     </div> 


     <input class="ui blue submit button" type="Submit" value="Submit"> 
    </form> 

这是registeraction.cfm代码:

<!--- Insert the new record ---> 
<cfinsert datasource="mydatasource" tablename="Users"> 

<h1>User Added</h1> 
<cfoutput> You have added #Form.name# #Form.email# to the testdb database. 
</cfoutput> 
+0

正如下面@pete freitag所示 - 请重新考虑更好的散列算法。为此,我在SQL Server中使用'bcrypt'作为CLR。 –

我认为这应该适合你。在registeraction.cfm只是创建哈希并将其存储在form.password(我会建议使用CFC的任何业务逻辑和使用CFM仅用于演示)

<cfset form.password = Hash(Form.password, "SHA") > 
    <!--- Insert the new record ---> 
    <cfinsert datasource="mydatasource" tablename="Users"> 

<h1>User Added</h1> 
<cfoutput> You have added #Form.name#  #Form.email# to the testdb database. 
</cfoutput> 

对于众所周知的hashings,您可以使用SQL Server内置功能HASHBYTES() - 返回VARBINARY

例如:

INSERT INTO dbo.table (Password) VALUES (HASHBYTES('MD5', 'plaintext'))

+0

谢谢。奇迹般有效 –

你应该避免使用MD5,它被认为是一个弱算法。见: How weak is MD5 as a password hashing function ?

此外,你不应该只是散列密码,你应该将纯文本密码与盐。欲了解更多信息,请参阅:OWASP: Password Storage Cheat Sheet