Application.cfmにどのようなセキュリティスクリプト/コードを追加しますか?
-
27-09-2019 - |
質問
私は当社のコードのやり取りに取り組んでおり、明確で読みやすく、適度に安全なApplication.cfmを持ちたいと思っています。
いいえ、application.cfcを使用していません。それで、それについて議論しないでください。
セキュリティのために追加するスクリプトを知りたいだけです。
ColdFusion 8 Standard、SQL 2008を使用しています。
現在使用しているスクリプトの1つは次のとおりですが、他の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>
お時間をいただきありがとうございます。
解決
私は、すべてをグローバルな方法でキャッチしようとすることを試みることに反対することをお勧めします。あなたのグローバル保護法がどれほど複雑で複雑であっても、亀裂をすり抜けるいくつかのものが必然的にあります。
代わりに、「正しい」(価値のあるもののために)メソッドは、ユーザー入力としての生活を始めたページ(または出力中に)に表示されるすべてのコンテンツを(または電子メールなど)に消毒することです。
そうは言っても、見てください owasp. 。彼らは、あなたが言及したさまざまな攻撃(SQLI、XSS、CRLF)を含む、あらゆる種類の攻撃から保護するための優れたライブラリを持っています。私の同僚は最近、これらの図書館のいくつかをアプリケーションで使用できるCFCにまとめました。 開発者のブログでそれを使用する方法を説明しました:
アンチサミー
アプリケーションがユーザー生成されたHTMLを受け入れる場合、たとえばブログのコメントなど、XSS攻撃を防ぐために入力を消毒することを確認する必要があります。ブログのコメントに悪意のあるコードを入力できるようにしてもらいたくないので、入力をフィルタリングする方法が必要です。入る アンチサミー. 。 Antisamyを使用すると、ユーザーが生成したHTMLを簡単にフィルタリングして、ポリシーとの対象となります。 AntisamyはJavaプロジェクトなので、ColdFusionから簡単に使用できるようにCFCにパッケージ化しました。
アンチサミーを使用するシンプルな方法は、アンチサミーコンポーネント(CFC.owasp.antisamy)のインスタンスを作成し、入力でgetcleanhtml()メソッドを呼び出すことです。
<cfset antisamy = CreateObject("component","cfc.owasp.antisamy") /> <cfset cleanHTML = antisamy.scan(form.someInput) />
これにより、デフォルトの(かなり許容される)ポリシーファイルでアンチサミーを実行し、Clean HTMLマークアップを返します。
ESAPIエンコーダー
OWASPプロジェクトから私が持ってきた次のライブラリは ESAPIエンコーダー. 。繰り返しますが、これは私がCFCに包まれたJavaプロジェクトです。エンコーダーは、ColdFusionに含まれるものを超えてエンコードするためのいくつかの方法を提供します。より便利な方法には、ecodeforjavascript()、encodeforhtmlattribute()、およびencodeforcss()が含まれます。コンポーネントを使用することは非常に簡単で、インスタンス化して適切な方法を呼び出すだけです。
<cfset encoder = CreateObject("component","cfc.owasp.Encoder") /> <cfset html = encoder.encodeForHTML("<body onload=""alert('XSS')"">Test</body>") />
このライブラリが提供する非常に便利な方法の1つは、Canonicalizeメソッドです。 ESAPIエンコーダーのベータ版からのドキュメント この方法が何をするかについての良い説明を提供します。
しかし、グローバルな解決策を主張する場合、なぜ車輪を再発明するのですか?どんなものを試してみませんか FuseGuard. 。価格は、おそらく、一緒に覆われ、デバッグし、自家製のシステムを突破するセキュリティの問題に対処するために費やされる開発時間のコストよりも低いでしょう。
他のヒント
個人的には、この「グローバル」アプローチが最高であるかどうかは本当にわかりません。私は確かめる 全て 着信データ すべてのモデル 状況ごとに特定の検証ルールを使用して、外部データを受け入れます。したがって、追加のレイヤーは過剰に見えます。
このようなスクリプトは、URLに渡された数値IDに文字列を入力することからあなたを保護することはできません。どんな方法でもチェックする必要があります。ビューでhtmleditformat/xmlformatを使用する必要があります。
cfscriptのPSリストループ:
for (i=1; i LTE ListLen(scopestoClean); i++) {
scopeName = ListGetAt(scopestoClean,i);
//... following code
}