0

我正在重做我们公司的代码,我想要一个清晰、易于阅读且相当安全的 application.cfm。

不,我们没有使用 application.cfc。所以请不要讨论这个问题。

只是想知道您会为安全添加哪些脚本。

我正在使用coldfusion 8标准,sql 2008。

这是我目前正在使用的脚本之一,但我想听听其他一些 Coldfusion 程序员的意见。

<cfset temp = cleanScopes('form,url') />

<!--- another method to clean url/form data from http://www.garyrgilbert.com/tools/coldfusion/cleanScopes.cfm.txt --->
<cffunction name="cleanScopes" access="public" returntype="void">
    <cfargument name="scopesToClean" type="string" required="yes">
    <cfargument name="charlist" type="string" required="no" default="">
    <cfscript>
        reTags ="<[^/>]*>|</.*>";
    </cfscript>
    <cfloop list="#scopestoClean#" index="scopeName">
    <cfif not findnocase("multipart/form-data",cgi.CONTENT_TYPE)>
        <cfscript>
            s=Evaluate(scopeName);
            for(field in s)
                if (isSimpleValue(s[field])){
                    if(reTags neq '')
                        do { prev=s[field];
                                s[field]=REReplaceNoCase(s[field],reTags,"","ALL");
                            } while (prev NEQ s[field]);
                        structUpdate(s,field,prev);
                        if (charlist neq '')
                            s[field] = replacelist(s[field],charlist,'');
                }
        </cfscript>
    </cfif>
    </cfloop>
    <cfreturn>
</cffunction>

感谢您的时间。

4

2 回答 2

4

我建议不要尝试以全球方式捕获所有内容。无论您的全球保护代码变得多么复杂和令人费解,都会不可避免地有一些事情会从裂缝中溜走。

相反,“正确”(对于它的价值)方法是清理页面(或电子邮件等)上呈现的所有内容 - 在输出期间 - 作为用户输入开始其生命。

也就是说,看看OWASP。他们有很好的库来防止各种攻击,包括你提到的各种攻击(sqli、xss、crlf)。我的一位同事最近将其中一些库打包成一个 CFC,我们可以在我们的应用程序中使用,并在我们的开发人员博客上解释了如何使用它

反萨米

如果您的应用程序接受用户生成的 HTML,例如博客评论,您需要确保清理输入以防止 XSS 攻击。您不希望有人能够在您的博客评论中输入恶意代码,因此您需要某种方法来过滤输入。输入反萨米。AntiSamy 允许您根据其术语策略轻松过滤用户生成的 HTML。AntiSamy 是一个 Java 项目,所以我将它打包成一个 CFC,以便从 ColdFusion 中轻松使用。

使用 AntiSamy 的最简单方法是创建 AntiSamy 组件的实例 (cfc.owasp.AntiSamy) 并在输入上调用 getCleanHTML() 方法。

<cfset antisamy = CreateObject("component","cfc.owasp.antisamy") />
<cfset cleanHTML = antisamy.scan(form.someInput) />

这将使用默认(相当宽松的)策略文件运行 AntiSamy,并返回干净的 HTML 标记。

ESAPI 编码器

我从 OWASP 项目带来的下一个库是ESAPI Encoder。同样,这是一个 Java 项目,我将其包装在 CFC 中以便于使用。除了包含在 ColdFusion 中的方法之外,编码器还提供了几种编码方法。一些更有用的方法包括 encodeForJavaScript()、encodeForHTMLAttribute() 和 encodeForCSS()。使用该组件非常简单,只需实例化它并调用适当的方法。

<cfset encoder = CreateObject("component","cfc.owasp.Encoder") />
<cfset html = encoder.encodeForHTML("<body onload=""alert('XSS')"">Test</body>") />

这个库提供的一个非常有用的方法是 canonicalize 方法。ESAPI 编码器测试版的文档很好地描述了这个方法的作用。

但是,如果您坚持全球解决方案,为什么要重新发明轮子?为什么不试试FuseGuard之类的东西。价格可能低于用于拼凑、调试和处理突破您自己开发的系统的安全问题的开发时间成本。

于 2010-10-01T17:33:46.843 回答
0

就个人而言,我不太确定这种“全球”方法是最好的。我检查接受外部数据的所有模型中的所有传入数据,并针对每种情况使用特定的验证规则。所以额外的层看起来有点过分了。

这样的脚本不会保护您将字符串放入传递给 URL 的数字 id 中——您必须以任何方式检查它。您必须以任何方式在视图中使用 HTMLEditFormat/XMLFormat,依此类推。

CFScript 的 PS 列表循环:

for (i=1; i LTE ListLen(scopestoClean); i++) {
    scopeName = ListGetAt(scopestoClean,i);
    //... following code
}
于 2010-10-01T16:27:40.863 回答