如何在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>
答
我认为这应该适合你。在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
正如下面@pete freitag所示 - 请重新考虑更好的散列算法。为此,我在SQL Server中使用'bcrypt'作为CLR。 –