QA@IT
«質問へ戻る

質問を投稿

ASP.NETのエラーページ表示時のランタイムエラーについて

ASP.NET(3.5)のWebサイトに対して、脆弱性診断ツール(OWASP ZAP)にて診断した所、
「アプリケーションエラーの開示」(500エラー)のアラートが出ました。

内容としては、以下のURL(カスタムエラーページ)に対してPOSTをした場合
HTTP 500エラー(Internal Server Error)が出るというものでした。

https://hogehoge.jp/error.aspx?aspxerrorpath=hoge.aspx

環境、設定等は以下の通り。

[環境]
IIS: 7.0 (Windows Server2008)
ASP.NET : 3.5

[web.configのカスタムエラーページの設定]

<customErrors defaultRedirect="error.aspx" mode="RemoteOnly"></customErrors>

[POST内容]
URL : https://hogehoge.jp/error.aspx?aspxerrorpath=hoge.aspx
Body : VIEWSTATE=~&VIEWSTATEGENERATOR=~ (__VIEWSTATE=[適当な値]でも発生)

[エラー内容]
「Viewstate 検証に失敗しました。 原因: 指定された viewstate で整合性チェックに失敗しました。」

恐らくエラーページを表示しようとしてエラーとなっている為、ランタイムエラーのページが表示されている?のかと思います。

この対処として、以下の通りGlobal.asaxのApplication_BeginRequestにて、
URLの"?aspxerrorpath=hoge.aspx"のクエリ部分を削除すると発生しなくなりました。

Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)

    If Not IsNothing(Request.QueryString("aspxerrorpath")) Then
        Dim requestPath As String = Request.ServerVariables("PATH_INFO")
        Response.Redirect(requestPath)
    End If

End Sub

疑問点は、これでなぜランタイムエラーが発生しなくなるのか分かりません。
(リダイレクトさせることで送られた無効なViewStateを読まないから?)

あとはここまでする必要があるのか謎です。。。
(ランタイムエラーページは内部情報が分かるような内容は含まれていませんし、
aspxerrorpathクエリを削除してしまうと、エラー元のページ名が分からなくなる。)

どなたか分かる方ご教授頂けると助かります。

ASP.NET(3.5)のWebサイトに対して、脆弱性診断ツール(OWASP ZAP)にて診断した所、
「アプリケーションエラーの開示」(500エラー)のアラートが出ました。

内容としては、以下のURL(カスタムエラーページ)に対してPOSTをした場合
HTTP 500エラー(Internal Server Error)が出るというものでした。

https://hogehoge.jp/error.aspx?aspxerrorpath=hoge.aspx

環境、設定等は以下の通り。


[環境]
IIS: 7.0 (Windows Server2008)
ASP.NET : 3.5

[web.configのカスタムエラーページの設定]
```ここに言語を入力
<customErrors defaultRedirect="error.aspx" mode="RemoteOnly"></customErrors>
```

[POST内容]
URL : https://hogehoge.jp/error.aspx?aspxerrorpath=hoge.aspx
Body : __VIEWSTATE=~&__VIEWSTATEGENERATOR=~ (__VIEWSTATE=[適当な値]でも発生)

[エラー内容]
「Viewstate 検証に失敗しました。 原因: 指定された viewstate で整合性チェックに失敗しました。」


恐らくエラーページを表示しようとしてエラーとなっている為、ランタイムエラーのページが表示されている?のかと思います。

この対処として、以下の通りGlobal.asaxのApplication_BeginRequestにて、
URLの"?aspxerrorpath=hoge.aspx"のクエリ部分を削除すると発生しなくなりました。

    Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)
        
        If Not IsNothing(Request.QueryString("aspxerrorpath")) Then
            Dim requestPath As String = Request.ServerVariables("PATH_INFO")
            Response.Redirect(requestPath)
        End If
        
    End Sub

疑問点は、これでなぜランタイムエラーが発生しなくなるのか分かりません。
(リダイレクトさせることで送られた無効なViewStateを読まないから?)

あとはここまでする必要があるのか謎です。。。
(ランタイムエラーページは内部情報が分かるような内容は含まれていませんし、
 aspxerrorpathクエリを削除してしまうと、エラー元のページ名が分からなくなる。)


どなたか分かる方ご教授頂けると助かります。