これは私を夢中にさせています。ASP.NETMVC3とClassicASPを組み合わせたWebアプリがあります。クラシックASPコードは非常に古く、クロスサイトスクリプティングやその他の脆弱性を防ぐのにあまり効果がありません。Classic ASPページに少しセキュリティを追加するために、Classic ASPによって処理される前にHTTP要求をインターセプトし、要求のASP.NET検証をトリガーするIISモジュールを作成しました。ここにあります:
public class RequestValidationModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
}
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
var context = HttpContext.Current;
if (context != null)
{
var request = context.Request;
if (request != null)
{
string path = request.CurrentExecutionFilePathExtension;
if(string.Equals(path, ".asp", StringComparison.OrdinalIgnoreCase))
{
//access request collections to trigger request validation
var form = request.Form;
var qs = request.QueryString;
var c = request.Cookies;
var h = request.Headers;
}
}
}
}
}
このモジュールは美しく機能します。ただし、有効なリクエストが送信された場合、クラシックASPコードのオブジェクトRequest.Formは常に空になります。フォーム(またはクエリ文字列)で送信された値を取得できません。モジュールをweb.configから削除するとすぐに、request.formが再び入力されます。
これは、IIS7.5統合モードで実行されているASP.NETMVC3アプリです。すべてのaspページは、MVC3アプリ内のディレクトリにあります。