如何解决Coldfusion cfqueryparam - 改变编码?
使用 EncryptByKey 和 cfqueryparam 运行查询时,该值似乎被截断了。
例如:
<cfset customer_number = 123 />
<cfset soc_sec_number = "123-45-6789" />
<cfquery datasource="web_applications">
OPEN SYMMETRIC KEY SSNKey
DECRYPTION BY CERTIFICATE SSNCert;
UPDATE
Customers
SET
SSN_Encrypted = EncryptByKey( Key_GUID( 'SSNKey' ),<cfqueryparam cfsqltype="CF_sql_VARCHAR" value="#soc_sec_number#" > )
WHERE
customer_number = <cfqueryparam cfsqltype="CF_sql_VARCHAR" value="#customer_number#" > ;
CLOSE SYMMETRIC KEY SSNKey;
</cfquery>
解密后的结果数据库值为“1”。如果我删除 <cfqueryparam>
,整个值将毫无问题地存储。此外,此问题仅在与 EncryptByKey
结合使用时才会发生。
我们使用的是 CF 2018 和 sql 2016。昨天才开始出现这个问题。它可能有关系也可能没有关系,但我们的力量昨天已经失去了。是否有可能是某些 cf 文件已损坏,或者某些编码设置已更改?我将如何检查这个?
更新:
执行以下查询时:
<cfquery name="get_ssn">
OPEN SYMMETRIC KEY SSNKey
DECRYPTION BY CERTIFICATE SSNCert;
SELECT
CONVERT( VARCHAR,DecryptByKey( [ssnEncrypted] ) ) AS decrypted_ssn
FROM
customers
WHERE
Customer.customer_number= <cfqueryparam cfsqltype="CF_sql_VARCHAR" value="#customer_number#" > ;
CLOSE SYMMETRIC KEY SSNKey;
</cfquery>
decrypted_ssn
的结果值如下:
<cfdump var="#get_ssn.decrypted_ssn#"> -> 123-45-6789
<cfdump var="#right(get_ssn.decrypted_ssn,4)#"> -> 89
in sql studio -> 1
此时我怀疑存在编码问题,因为 Coldfusion 返回完整值但认为 right(123-45-6789,4)
是 89
而不是 6789
我不知道如何测试这个理论。
更新:
我已经确认这个问题出现在多个表上,并且有多个对称密钥。
再次更新:
使用cfqueryparam
保存的字符串,当使用LEN()
命令时,输出22,而WITHOUT cfqueryparam
的值输出11。
更新: 我遵循了解决方案 Here,它似乎解决了我的问题。但我想了解这是怎么发生的。直到昨天,当电源断电并且服务器重新启动时,连接似乎才需要这样做。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。