我正在进行一次短期合同演出,试图修补其遗留代码中的一些漏洞。我正在研究的应用程序是Classic ASP(VBScript)和.Net 2.0(C#)的组合。他们购买的工具之一是Fortify 360.
以下是应用程序中当前的经典ASP页面:
<%@ Language=VBScript %>
<%
Dim var
var = Request.QueryString("var")
' do stuff
Response.Redirect "nextpage.asp?var=" & var
%>
我知道,我知道,简短且非常危险。
所以我们编写了一些(en / de)编码器和验证/验证程序:
<%@ Language=VBScript %>
<%
Dim var
var = Decode(Request.QueryString("var"))
' do stuff
if isValid(var) then
Response.Redirect "nextpage.asp?var=" & Encode(var)
else
'throw error page
end if
%>
Fortify仍然认为这很容易受到Header Manipulation的影响。 Fortify正在寻找什么或究竟是什么?
我怀疑Fortify正在寻找特定关键字的原因是,在.Net方面,我可以包括Microsoft AntiXss程序集和调用函数,如GetSafeHtmlFragment
和UrlEncode
,Fortify是高兴。
有什么建议吗?
答案 0 :(得分:2)
Jarret R是对的;您需要使用规则构建器来创建Dataflow Cleanse规则;将函数名称指定为小写,将语言指定为“vb”。
您的规则应如下所示:
<DataflowCleanseRule formatVersion="3.10" language="vb">
<RuleID>12345-67890-BABE-CAFE</RuleID>
<TaintFlags>-XSS,+VALIDATED_CROSS_SITE_SCRIPTING</TaintFlags>
<FunctionIdentifier>
<NamespaceName>
<Pattern/>
</NamespaceName>
<ClassName>
<Pattern/>
</ClassName>
<FunctionName>
<Pattern CaseInsensitive="true">(?i)decode</Pattern>
</FunctionName>
<ApplyTo implements="true" overrides="true" extends="true"/>
</FunctionIdentifier>
<OutArguments>return</OutArguments>
</DataflowCleanseRule>
答案 1 :(得分:1)
如果编码方法是您自己的(或Fortify无法识别的方法),您将必须编写一个自定义规则来告诉它脏域(在这种情况下为var)一旦运行通过编码方法。
答案 2 :(得分:0)
对XDR(跨站点重定向)的潜力以及可能的HTTP响应拆分感到不满。 Fortify可能不知道你的编码例程做了什么,因此它标记它(用户控制的变量用于重定向)。 顺便说一下,Cat.Net做同样的事情。 我认为你是对的AntiXSS会让它变得快乐。