あなたの質問に対する短い答えは「はい」です。
私は、3つの方法を使用してハッキングの試行をブロックします。
私はすべてのデータベースクエリでcfqueryparamを使用しています。私は、テンプレート/ cfmファイルの先頭にあるcfparamをURLスコープ変数に使用します。
私はPortcullisまたはその変形を使用しています。 http://portcullis.riaforge.org/から入手できます。 Portcullisは、いくつかのクロスサイトスクリプティング攻撃に対しても防御します。
私はWindows IIS 7.5(Windows Server 2008 R2)を使用しています。 URLリライト機能を使用して、URLベースの攻撃の大部分をブロックします。 Apacheとそれがサポートしているリライトでも同様のことができます。ここに私のIISのURL書き換えルールは以下のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<appcmd>
<CONFIG CONFIG.SECTION="system.webServer/rewrite/globalRules" path="MACHINE/WEBROOT/APPHOST" overrideMode="Inherit" locked="false">
<system.webServer-rewrite-globalRules>
<rule name="SQL Injection - EXEC - SCRIPT_NAME" stopProcessing="true">
<match url="^.*EXEC\s*[\(|%28].*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - EXEC - QS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^.*EXEC\s*[\(|%28].*$" />
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - CAST - SCRIPT_NAME" stopProcessing="true">
<match url="^.*CAST\s*[\(|%28].*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - CAST - QS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^.*CAST\s*[\(|%28].*$" />
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - DECLARE - SCRIPT_NAME" stopProcessing="true">
<match url="^.*DECLARE.*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - DECLARE - QS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^.*DECLARE.*$" />
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - NVARCHAR - SCRIPT_NAME" stopProcessing="true">
<match url="^.*CHAR\s*[\(|%28].*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - NVARCHAR - QS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^.*CHAR\s*[\(|%28].*$" />
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - sp_password - SCRIPT_NAME" stopProcessing="true">
<match url="^.*sp_password.*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - sp_password - QS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^.*sp_password.*$" />
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - xp - SCRIPT_NAME" stopProcessing="true">
<match url="^.*%20xp_.*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - xp - QS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^.*%20xp_.*$" />
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
</system.webServer-rewrite-globalRules>
</CONFIG>
</appcmd>
これらの規則はCに追加されます。IISの\ Windowsの\ system32 \ inetsrv \ config \にあるapplicationHost.configファイル。しかし、私は**** NOT ****このファイルを直接編集することをお勧めします。 1つの間違いとIISが読み込まれません。代わりに、&を上記のルールを貼り付けて、 "iis-global-rewrite.xml"として保存します。次に、あなたのIISサーバーにルールを追加するには、次のバッチファイルを実行します。
C:\Windows\System32\inetsrv\appcmd.exe set config -in < iis-global-rewrite.xml
IISの書き換えルールは、IIS 7.0(Windows Server 2008の)で動作するはずですが、私はそれをテストしていません。
これらのルールは、サーバーにアクセスできない場合はweb.configファイルを使用して1つのサイトに適用することもできます。
なぜ3つの異なる方法を使用して保護しますか?それらのどれもがすべての拠点を網羅していないからです。 IISの書き換えルールは、URLベースの攻撃に対してのみ保護します。ハッカーは同じことを行うフォーム提出攻撃を使用することもできます。私は、PHP、ASPなどのサーバー上のすべてのサイトで動作するため、最初の保護ラインとしてIISルールを好む.Portcullisは、フォームベースの攻撃とクロスサイトスクリプティングを捕捉するため、ColdFusionの第2の優れた防衛線である攻撃。最後の防衛線は、URL /フォームベースのSQLインジェクション攻撃から保護するcfqueryparam/cfparamコードです。
これら3つの方法をすべて使用する場合、サーバー/サイトは非常に安全です。私は、攻撃が進化し改善するにつれて、時々サーバーログを見直すようアドバイスします。
うわー、それはちょうど完璧です。私は実際にIIS上でCFを実行していますので、私は間違いなく、より高度な書き換えルールを使ってWebアプリケーションを保護します。ありがとう! – Eleeist
IIS URLリライトとApache mod_rewriteは、防衛やSEOのための非常に便利なツールです。 http://blogs.iis.net/ruslany/archive/2009/04/08/10-url-rewriting-tips-and-tricks.aspxには、IIS URL書き換えの便利な例がいくつかあります。 –