2011-12-20 26 views
3

オープンリダイレクト攻撃を防止するための最良の方法は何ですか?現在、私はasp.netウェブサイトを開発しています。ログインに成功すると外部リンクにユーザーをリダイレクトしないようにしたいのですか?オープンリダイレクト攻撃を防ぐ方法は?

編集:既存のコードを変更せずにソリューションを実装することは可能ですか?

+0

WebフォームまたはMVC与えIsLocalUrlの定義を使用することができます

void OnLoggedIn(object sender, EventArgs e) { string returnto = Request.QueryString["ReturnUrl"]; if (returnto != "" and isLocalUrl(returnto)) Response.Redirect(returnto); } 

loggedin eventはこのような何かを行うには良い場所でしょうか? –

+0

私はwebformsを使用しています – kvc

答えて

9

login controlを使用しているとします。 ReturnUrlパラメータがローカルURLであり(別のドメインを指していない)チェックであることを確認する必要があります。あなたはhere

private bool IsLocalUrl(string url) 
{ 
    if (string.IsNullOrEmpty(url)) 
    { 
     return false; 
    } 

    Uri absoluteUri; 
    if (Uri.TryCreate(url, UriKind.Absolute, out absoluteUri)) 
    { 
     return String.Equals(this.Request.Url.Host, absoluteUri.Host, 
        StringComparison.OrdinalIgnoreCase); 
    } 
    else 
    { 
     bool isLocal = !url.StartsWith("http:", StringComparison.OrdinalIgnoreCase) 
      && !url.StartsWith("https:", StringComparison.OrdinalIgnoreCase) 
      && Uri.IsWellFormedUriString(url, UriKind.Relative); 
     return isLocal; 
    } 
} 
+0

ありがとう、@パオロ、しかし、私は既存のコードを変更したくない、実装することは可能ですか? – kvc

+0

再コンパイルできないという制約がある場合、この変更はログインページのHTMLで直接インラインで行うことができます([LoggedInイベントのドキュメント]を参照)。http://msdn.microsoft.com/en-us/library例としては/system.web.ui.webcontrols.login.loggedin.aspx) –

関連する問題