我遇到了一个与安全相关的奇怪问题,最近我尝试在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]字符串或二进制数据将被截断。
答案 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个字符?