C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: ASP.NET ViewStateMAC認証エラー


(過去ログ 120 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■70388 / inTopicNo.1)  ASP.NET ViewStateMAC認証エラー
  
□投稿者/ しゃろろん (1回)-(2014/03/20(Thu) 07:31:45)

分類:[ASP.NET (C#)] 

いつもお世話になっております。

[環境]
Windows Server 2008R2
IIS 7.5/IIS URL Rewrite Module2.0

ホームページの制作をASP.NETでしているのですが、URLを匿名化してセキュリティ向上をしようと思っているのですが、ViewStateのMAC認証エラーが発生して作業が進みません。

タイミングはフォームのデータをPOSTする時です。

初めはServer.Transferによって実装していたところ、同じようなMACの認証エラーが発生し、MSDNで確認すると実質直しようがないものだと知り、IISのRewriteモジュールのカスタムプロパイダを作成し、そこで書換を行おうと思いました。
しかしエラーは変わりませんでした。

IIS Rewriteモジュールはかなりのサイトで使われているみたいで、POSTにも問題ないと聞いていたためになぜこのようなエラーが発生してしまうのか理解できません。

現在の仕様をまとめます。
https://secure.example.com/PAGE/GUID にアクセス
IIS Rewriteモジュールのカスタムプロパイダでhttps://secure.example.com/〜にリライト
と言うものです。
ログを見たところPOSTする前もPOSTした後も、URLは変わっていませんでした。
GUIDもPOSTする前とした後は変えません。
サーバーは1台であり、アプリケーションプールも同じ、動作させているサイトも同じなのでMachineKeyは変えなくていいと思っております。(けどWeb.configの方にですが固定キーは設定しています。)

そもそもIIS Rewriteモジュールのリライトを使うだけでViewState MAC認証エラーは発生するものなのでしょうか。
作業が進まず困っております。どうか助けてください

[エラー原文]
Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.


引用返信 編集キー/
■70391 / inTopicNo.2)  Re[1]: ASP.NET ViewStateMAC認証エラー
□投稿者/ WebSurfer (199回)-(2014/03/20(Thu) 10:01:56)
No70388 (しゃろろん さん) に返信
> 初めはServer.Transferによって実装していたところ、同じようなMACの認証エラーが発生し、

具体的にどのようにしていたのか書いていただけませんか?

> MSDNで確認すると実質直しようがないものだと知り、IISのRewriteモジュールのカスタムプロパイダを作成し、そこで書換を行おうと思いました。

「カスタムプロパイダ」とは何ですか? これも具体的に書いていただけませんか?

> https://secure.example.com/PAGE/GUID にアクセス
> IIS Rewriteモジュールのカスタムプロパイダでhttps://secure.example.com/〜にリライト

書き換えルール(web.config にあります)を開示してください。

> そもそもIIS Rewriteモジュールのリライトを使うだけでViewState MAC認証エラーは発生するものなのでしょうか。

そんなことはないはずです。以下のページの EnableViewStateMac のセクションを見てください。

ASP.NET の組み込み機能を活用し、Web 攻撃を回避する
http://msdn.microsoft.com/ja-jp/library/ms972969.aspx

その図で "Must Match" とありますが、マッチしない時に発生します。なので、リライトを行った結果
そのような状況にならないか、考えてください。
引用返信 編集キー/
■70396 / inTopicNo.3)  Re[2]: ASP.NET ViewStateMAC認証エラー
□投稿者/ しゃろろん (2回)-(2014/03/20(Thu) 13:34:07)
回答ありがとございます。

> 具体的にどのようにしていたのか書いていただけませんか?
Server.Transferについては
Server.Transfer(URL, true); というふうに呼び出していました。
MSDNによると、ページ間でパブリックプロパティでデータの受け渡し、もしくは第2引数をfalseすれば直るとのことでしたが、
仕様上前者は使えず(どのページに移動するかセッションキーによって変わるため)、後者の方法はPOSTできないためボツです。

>
> 「カスタムプロパイダ」とは何ですか? これも具体的に書いていただけませんか?
>
Google: https://www.google.co.jp/search?q=iis+url+rewrite+custom+provider
IIS.net: http://www.iis.net/learn/extensions/url-rewrite-module/developing-a-custom-rewrite-provider-for-url-rewrite-module
URL Rewriteの置き換えを自身でカスタマイズできるものです。

>
> 書き換えルール(web.config にあります)を開示してください。
>
問題の書換ルールのみ。カスタムプロバイダはSecureReplaceという名前で設定しています。
<rule name="page" stopProcessing="true">
<match url="(.+)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{SecureReplace:{R:0}}" pattern="(.+)" />
</conditions>
<action type="Rewrite" url="{C:0}" appendQueryString="false" />
</rule>


> そんなことはないはずです。以下のページの EnableViewStateMac のセクションを見てください。
EnableViewStateMacをオフにすると確かにエラーは発生しませんが、イベントハンドラが正常に動作しなくなります。
また、セキュアのページの実装と言えど通信を傍受されない方がいいことに変わりはないためオフにする気もありません。

[追記]
あの後いろいろ確認してみました。が、結局変わらず
1. URLにnull文字など制御文字が紛れていないか→問題なし
2. 大文字になってたり小文字になってたりしていないか→問題なし
引用返信 編集キー/
■70399 / inTopicNo.4)  Re[3]: ASP.NET ViewStateMAC認証エラー
□投稿者/ しゃろろん (3回)-(2014/03/20(Thu) 14:45:56)
自己解決したので報告します。

原因は未だ不明、ただIIS URL RewriteのCustom Providerのおかげという部分まではあってるみたいです。

[解決策]
MachineKeyを自動生成にしたら解決しました。

MSDNにはServer.Transferにかぎらず、ViewStateでエラーが発生する場合はMachineKeyを設定するようにとの記述があっただけに、その逆の事をしたら解決するのは…何がいけなかったのか結局わからずじまいでした。
うまくいかないことがあれば反対のことをすればいいとよく聞きますが、まさか本当に解決するとは…

とりあえず私の問題は解決したので解決済みにします。
回答していただいたWebSurferに感謝します。
解決済み
引用返信 編集キー/
■70400 / inTopicNo.5)  Re[4]: ASP.NET ViewStateMAC認証エラー
□投稿者/ WebSurfer (200回)-(2014/03/20(Thu) 15:43:07)
No70399 (しゃろろん さん) に返信
> 原因は未だ不明、ただIIS URL RewriteのCustom Providerのおかげという部分まではあってるみたいです。

できれば原因を究明して、具体的に書いていただければと思います。

原因不明のまま終わらせては、この掲示板にノイズを増やしただけと言う結果に
なってしまいますので。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -