【发布时间】:2015-08-14 06:08:45
【问题描述】:
我遇到了一个奇怪的安全相关问题,最近我在尝试在 SQL Server 数据库字段 nvarchar(130) 中插入散列密码时经常出现间歇性错误:
<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]字符串或二进制数据将被截断。
【问题讨论】:
-
(编辑)AFAIK,是的,它应该生成一个 512 位值 / 128 个字符编码为十六进制。发生错误时的实际值是多少?
-
我希望我知道失败的实际值,当我尝试重现代码有效的错误时。我可以输入一个 try/catch 并通过电子邮件向自己发送失败的值,它经常发生,只是在我尝试时不会发生。
-
本着try/catch的精神,你的Application.cfc的onError()函数是做什么的?
-
密码是您在该查询中插入的唯一列吗?您能否发布整个查询和整个错误消息(嗯:我们不需要堆栈跟踪)。为什么要为该列使用 nvarchar,然后使用 char 传递其值?这似乎有点奇怪,不知道?哪个版本的 ColdFusion?
-
好问题。克里斯 - 你的 CF 版本是什么?对于 CF10+,请使用 cf_sql_nvarchar。 (虽然您可能不需要 nvarchar 类型来存储 HEX)
标签: coldfusion