- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近,我们聘请的一家安全风险公司发现了我们 Coldfusion 应用程序中某个函数的特定参数存在 SQL 注入(inject)风险。该参数被正确捕获为 cfargument:
<cfargument name="status" required="false" type="string">
并且还正确地参数化为 cfprocparam:
<cfif isDefined('ARGUMENTS.status') AND ARGUMENTS.status NEQ "">
<cfprocparam type="in" value="#ARGUMENTS.status#" dbvarname="@search_status" cfsqltype="cf_sql_varchar">
<cfelse>
<cfprocparam type="in" null="yes" dbvarname="@search_status" cfsqltype="cf_sql_varchar">
</cfif>
然后以这种方式在存储过程中使用它,为 SQL 查询构建一个 where 子句:
if (len(@search_status) > 0)
begin
set @strWhere = @strWhere + ' AND e1.cps_txt LIKE '+ '''%'+@search_status+'%'''
end
当然,参数化以确保值是 varchar 并不能阻止输入和传递一串恶意代码。这似乎也很容易成为一个更大的问题,因为它远不是我们应用程序中唯一将字符串参数传递给 cfc 函数然后在 SQL 查询中使用的地方。
最佳答案
不得不在以前的雇主那里解决这个问题。诀窍是通过true
或 false
到 null
参数并避免编写所有这些调用不同版本 procparam
的条件代码有或没有属性。只需始终拥有属性并将条件逻辑放入值中即可。
<cfprocparam type="in"
dbvarname="@search_status"
cfsqltype="cf_sql_varchar"
value="#ARGUMENTS.status#"
null="#!(structKeyExists(arguments, "status") AND (len(arguments.status) NEQ 0))#">
根据条件的复杂程度,您可以简单地将其作为变量传递。
<cfset statusNull = true>
<cfif structKeyExists(arguments, "status") AND (len(arguments.status) NEQ 0)>
<cfset statusNull = false>
</cfif>
<cfprocparam type="in"
dbvarname="@search_status"
cfsqltype="cf_sql_varchar"
value="#ARGUMENTS.status#"
null="#statusNull#">
我想重申来自 SOS 的评论,其中提到了动态 SQL。我们还从数以千计的存储过程中消除了动态 SQL,并用来自他的链接消息的条件检查取而代之。这比处理大量的字符串连接代码更容易阅读和调试。
WHERE ( @OrderId IS NULL OR tblOrder.OrderId = @OrderId )
AND ( @OrderCustomer IS NULL OR tblOrder.OrderCustomer = @OrderCustomer )
在将参数传递给 this 函数/过程之前,我也会避免添加查询只是为了查找状态的有效值。每次调用此进程时,这只会增加系统开销。
关于coldfusion - 如何应对这种 SQL 注入(inject)风险(Coldfusion)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68657859/
本文分享自华为云社区《【沃土方案--金融】银丰新融-反洗钱自主监测系统(一)》,作者:HuaweiCloudDeveloper 。 “三反(反洗钱、反恐怖融资、反逃税)”意见持续深化落实,第四轮互评估
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我们有一个数据驱动的 Activity ,它构建了一大组(通常最多 100 个)类似按钮的组件,并将它们放在一个 Scrollable 中。每个按钮都是从资源中膨胀的,并且基于 RelativeLay
我在一个非常早期的项目中使用 Hibernate EntityManager 和 Hibernate Annotations for ORM。该项目需要尽快启动,但规范不断变化,我担心系统将启动并收集
这是一个来自 SPOJ 的简单编程问题:http://www.spoj.com/problems/PROBTRES/ . 基本上,您需要输出 i 和 j 之间数字的最大 Collatz 循环。 (
由于 C++11 引入了新的统一初始化语法,许多人建议使用它来代替旧式语法。至少,如果不是这个所谓的极端情况: struct Foo { Foo(int){ std::cout
Log4J2漏洞涉及的影响太广了,昨天发文后很多粉丝留言问Spring Boot项目是否受到Log4J2漏洞影响。Spring官方已经全面进行了排查,现在大家可以知道这些信息和应对方法。 默认
我正在通过 UDP(视频数据)接收 RTP。 RTP 包含我需要解码的 H264。不幸的是,大多数 RTP 都包含零散的数据。由于缺少 RTP 序列,我无法正确重建 H264。 关于如何减少数据丢失以
我正在阅读 this thread并在解决方案中注意到,如果您发送的数据长度与实际数据分开,Nagle 的算法可能会播放和取消同步发送的数据。 我想知道这一点,因为我看到很多代码示例,客户端首先发送数
我正在创建一个简单的应用程序,它将使用react-native-firebase和react-native-maps。按照安装文档的说明,我已经启动并运行了 map ,没有任何问题。接下来,我已经安装
我是一名优秀的程序员,十分优秀!