0

我正在从事短期合同工作,试图修补他们遗留代码中的一些漏洞。我正在开发的应用程序是 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 很高兴。

有什么建议吗?

4

3 回答 3

2

Jarret R 是对的;您将需要使用规则构建器来创建数据流清理规则;将函数名称指定为小写,语言指定为“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>
于 2010-07-22T23:43:28.730 回答
1

如果 encode 方法是您自己的(或 Fortify 无法识别的),您将必须编写自定义规则来告诉它脏字段(在本例中为 var)在通过 Encode 方法运行后是干净的。

于 2009-11-10T20:52:31.020 回答
0

它对 XDR(跨站点重定向)和潜在的 HTTP 响应拆分的潜力感到不满。Fortify 可能不知道您的编码例程做了什么,因此它会标记它(用户控制变量用于重定向)。顺便说一句,Cat.Net 做同样的事情。我认为你是对的,AntiXSS 会让它开心。

于 2009-10-13T00:28:00.993 回答