gpt4 book ai didi

coldfusion - ColdFusion中防止SQL注入(inject)的方法

转载 作者:行者123 更新时间:2023-12-02 18:48:08 25 4
gpt4 key购买 nike

我想知道 # 是否符号就足够了。

这是我正在使用的 sql 命令的一部分

WHERE login='#FORM.login#' AND password COLLATE Latin1_General_CS_AS = '#FORM.password#'

我正在尝试使用诸如' OR 1=1之类的用户名来测试它及其变体,但即使它不起作用,我也不希望有一种错误的安全感。

我已经使用 <cfqueryparam> 阅读过该内容可以防止这种形式的攻击,还有其他方法吗?

最佳答案

要走的路是<cfqueryparam> 。它简单、直接、数据类型安全,可以处理列表(与 IN (...) 一起使用)并且可以处理条件 NULL。另外,您可以在循环中获得好处 - 查询文本本身仅发送到服务器一次,每次进一步的循环迭代仅传输参数值。

您可以使用'#var#'并且相对安全。在 <cfquery> 的背景下标签 ColdFusion 将扩展 var 的值单引号被转义,因此存在某种针对 SQL 注入(inject)的自动防御。 但要注意:根据设计,函数返回值不会发生这种情况:例如,在 '#Trim(var)#' 中单引号不会被转义。这很容易被忽视,因此很危险。

此外,它在循环中运行时也有一个缺点:由于变量插值发生在 SQL 发送到服务器之前,ColdFusion 将在循环的每次迭代中生成新的查询文本。这意味着网络上需要更多字节,并且服务器上没有查询计划缓存,因为每个查询文本都是不同的。

简而言之:使用 <cfqueryparam>只要你可以:

WHERE
login = <cfqueryparam value="#FORM.login#" cfsqltype="CF_SQL_VARCHAR">
AND password = <cfqueryparam value='#Hash(FORM.password, "SHA-512")#' cfsqltype="CF_SQL_VARCHAR">

而不是简单的 Hash() ,你确实应该使用加盐哈希,正如 @SLaks 在他的评论中指出的那样。

关于coldfusion - ColdFusion中防止SQL注入(inject)的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7194502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com