4

そのため、現在 CF11 と CFWheels 1.1 を使用しています。「グローバル スクリプト保護」(GSP) サーバー機能は、XSS ベースをカバーするというひどい仕事をしています。JS のすべてのタグ/ベクターがデータベースに挿入されるのをブロックするように拡張したいと思います。

CF11 は、application.cfc で指定された xml ポリシー ファイルを適用する getSafeHTML() 関数を介して antiSamy 保護を提供しますが、それを正しく使用するには、アプリケーション内のすべての varchar cfqueryparam を変更する必要がありますか?

GSP 機能が動作するのと同様の方法で、CF11 を取得してアンチサミー機能サーバーまたはアプリケーション全体を有効にする方法はありますか? つまり、GSP は、すべてのクエリ/フォーム アクションを変更することなく、アプリに送信された入力からタグを自動的に削除します。アンチサミー ポリシー ファイルまたは getSafeHTML() を同じ方法で適用する方法が欲しいです。

ありがとう!

4

3 に答える 3

8

なぜそれをすべての人に適用しなければならないのですか?文字列(varchar)入力に対してのみ、挿入時にのみ行う必要があります。それでも、どこでも使用できるわけではありません。たとえば、私の名前と略歴を尋ねる場合、私の名前に html が必要になる理由はありません。たとえ「良い」html であっても。したがって、すべてのhtmlをエスケープするか、単にすべてを削除するために、すでに何かを使用していると確信しています。getSafeHTML を使用するのは、bio のようなフィールドだけです。

検証は仕事です。あなたは(通常)「一度に」解決策を望んでいません。ただ弾丸を噛んでそれをしてください。

やりたい場合は、onRequestStart を使用して、フォームと URL スコープ内のすべてのキーを自動的に処理できます。記憶で書いているので誤字脱字があるかもしれませんが、以下に例を示します。

function onRequestStart(string req) {
    for(var key in form) { form[key] = getSafeHTML(form[key]); }
    for(var key in url) { url[key] = getSafeHTML(url[key]); }
}
于 2014-09-25T10:33:00.047 に答える
0

cfwheels 1.1 アプリ用に実装されたソリューション:

https://code.google.com/p/owaspantisamy/downloads/listのスラッシュドット ファイルを使用しました

これは application.cfc に入ります:

<cfcomponent output="false">
    <cfset this.security.antisamypolicy="antisamy-slashdot-1.4.4.xml">      
    <cfinclude template="wheels/functions.cfm">     
</cfcomponent>

これは、/ProjectRoot/events/onrequeststart.cfm ファイルに含まれます。

    function xssProtection(){
var CFversion = ListToArray(SERVER.ColdFusion.productversion);
if(CFversion[1]GTE 11){
    for(var key in form) {
        if(not IsJSON(form[key])){
            form[key] = getSafeHTML(form[key]);
        }
    }
    for(var key in url) {
        if(not IsJSON(url[key])){
            url[key] = getSafeHTML(url[key]);
        }
    }
}

} xssProtection();

于 2014-09-25T21:44:59.560 に答える