哈希密码有时超过128个字符

时间:2015-05-31 20:33:44

标签: coldfusion

我遇到了一个与安全相关的奇怪问题,最近我尝试在nvarchar(130)的SQL Server数据库字段中插入散列密码时遇到了常规但间歇性的错误:

<cfqueryparam value="#hashpass#" cfsqltype="cf_sql_char" maxLength="130">

因此设置了hashpass变量:

<cfset hashpass =  Hash(arguments.password & getsalt.user_salt, "SHA-512")>

想知道SHA-512哈希值如何超过128个字符,当文档说它应该总是128个?这是ColdFusion 10错误:

[Macromedia] [SQLServer JDBC Driver] [SQLServer]字符串或二进制数据将被截断。

1 个答案:

答案 0 :(得分:3)

从您的错误看来,问题出在数据库级别,因为ColdFusion未对maxlength标记cfqueryparam检查失败,并允许执行查询。我刚刚测试过尝试传递超过maxlength属性中指定长度的字符串(在CF10上)并得到错误:

The cause of this output exception was that: 
coldfusion.tagext.sql.QueryParamTag$InvalidDataException: 
Invalid data value this-is-a-string-that-is-too-long exceeds maxlength setting 10..`

正如问题评论中提到的Adam Cameron一样,您的查询中的某个字段可能会抛出错误。

由于散列密码长度为128个字符 - 您有没有理由认证130个字符?