Kobarin's Development Blog

C#やASP.NET、公開APIなどについての記録です。

URLScanのグローバルフィルターとサイトフィルター

目的

SQLインジェクション攻撃など、URLやHTTPヘッダーに不正なデータを紛らせる事による侵入や不正なアクセスに対する防衛手段の1つです。

公式サイト

URLScanの設定
(ダウンロードもページ内から参照しています)

前提条件

まず前提プラットフォームが以下の通りのようです(転載)。

ファイルの置き場所

インストールすると、URLScanのx86x64かによって、以下のフォルダに.dllや.iniが追加されます。

  • %windir%\system32\inetsrv
  • %windir%\syswow64\inetsrv

ちなみに、当方の環境はWin2008のx64でしたが、system32ディレクトリにコピーされました。アプリがx86版だったのかもしれませんが、実行には影響しません。

フィルター種別

本タイトルにもあるとおり、フィルターにはグローバルフィルターとサイトフィルターがあります。

グローバルフィルター
サーバー内の全サイトに適用するフィルター。前述の置き場所にある.iniで定義します。
サイトフィルター
サイト単位で適用するフィルター。公式の例ですと、グローバルフィルターの.dllと.iniを、c:\site1(おそらくサイトルート)にコピーするようです。

当方ではグローバルしか使っていませんが、特定のサイトのみ適用したいルール等があれば、サイトフィルターを使うとよいでしょう。

例示

urlscan.iniの全てを書くと膨大だし、セキュリティ的にも手の内を明かすみたいで嫌なので、代表的なポイントを一部書きます。

[AllowExtensions]
;許可する拡張子。ページ・画像・Officeは基本として、.axdはASP.NETの実行時に呼び出されるため、必ず追加する事。
.aspx
.asp
.htm
.html
.jpg
.jpeg
.gif
.png
.css
.js
.xls
.xlsx
.doc
.docx
.pdf
.txt
.xml
.rss
.axd

[DenyExtensions]
;リモートからの実行が明らかに不必要で、且つ危なっかしい拡張子。
.exe
.bat
.cmd
.com

;設定ファイルやログファイル等、これもリモートからは必要ない。
.ini     ; Configuration files
.log     ; Log files
.pol     ; Policy files
.dat     ; Configuration files
.config  ; Configuration files

[DenyUrlSequences]
;URL中に存在しえないキャラクタ。念のため補足ですが、「..」は「<a href="../xxx.htm">」には影響しません。あくまでAbsolute URLとして認識します。
..  ; Don't allow directory traversals
./  ; Don't allow trailing dot on a directory name
\   ; Don't allow backslashes in URL
:   ; Don't allow alternate stream access
%   ; Don't allow escaping after normalization
&   ; Don't allow multiple CGI processes to run on a single request

[DenyQueryStringSequences]
;スクリプトを不正実行しようとしている可能性
<   ; Commonly used by script injection attacks
>   ; Commonly used by script injection attacks

[SQL Injection Strings]
;SQLインジェクション対策。SQL文に以下のパラメータが存在する場合、拒否ります。
char
alter
begin
cast
convert
create
cursor
declare
delete
drop
end
exec
fetch
insert
kill
open
select
sysobjects
syscolumns
update

以上。