0

私は会社のコードのやり直しに取り組んでおり、明快で読みやすく、適度に安全な application.cfm を作成したいと考えています。

いいえ、application.cfc は使用していません。ですから、それについては議論しないでください。

セキュリティのために追加するスクリプトを知りたいだけです。

私はcoldfusion 8標準、sql 2008を使用しています。

これは私が現在使用しているスクリプトの 1 つですが、他のコールドフュージョン プログラマーの意見を聞きたいです。

<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 プロジェクトなので、ColdFusion から簡単に使用できるように CFC にパッケージ化しました。

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です。繰り返しますが、これは使いやすいように CFC でラップした Java プロジェクトです。エンコーダーには、ColdFusion に含まれている方法以外にも、いくつかのエンコード方法が用意されています。より便利なメソッドには、encodeForJavaScript()、encodeForHTMLAttribute()、encodeForCSS() などがあります。コンポーネントを使用するのは非常に簡単です。インスタンス化して適切なメソッドを呼び出すだけです。

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

このライブラリが提供する非常に便利なメソッドの 1 つは、canonicalize メソッドです。ESAPI Encoder のベータ版のドキュメントには、このメソッドの機能がよく説明されています。

しかし、グローバルなソリューションを主張するのであれば、なぜ一からやり直す必要があるのでしょうか? FuseGuardのようなものを試してみませんか。この価格は、おそらく、一緒にコブリングし、デバッグし、自家製のシステムを突破するセキュリティ問題に対処するために費やされる開発時間のコストよりも安いでしょう.

于 2010-10-01T17:33:46.843 に答える
0

個人的には、この「グローバル」アプローチが最適かどうかはよくわかりません。外部データを受け入れるすべてのモデルのすべての受信データを、状況ごとに特定の検証ルールを使用してチェックします。したがって、追加のレイヤーはやり過ぎに見えます。

このようなスクリプトでは、URL に渡される数値 ID に文字列を挿入することはできません。何らかの方法で確認する必要があります。何らかの方法でビューで HTMLEditFormat/XMLFormat を使用する必要があります。

PS CFScript のリスト ループ:

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