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

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

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

Re[6]: 「無効なポストバックまたはコールバック・・・」エラーについて


(過去ログ 23 を表示中)

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

■9933 / inTopicNo.1)  「無効なポストバックまたはコールバック・・・」エラーについて
  
□投稿者/ 向井 (14回)-(2007/11/07(Wed) 17:13:39)

分類:[ASP.NET (VB)] 

2007/11/07(Wed) 17:14:01 編集(投稿者)

いつもお世話になっております。
向井と申します。

時折次のエラーが発生して困っております。

■エラーメッセージ:
無効なポストバックまたはコールバック引数です。イベントの検証は、構成の <pages enableEventValidation="true"/>、またはページの <%@ Page EnableEventValidation="true" %> を使用して有効にされます。セキュリティの目的により、この機能は、イベントをポストバックまたはコールバックする引数が、それらを最初に表示したサーバー コントロールから発行されていることを確認します。データが有効であり、予期されている場合、検証のためのポストバックまたはコールバック データを登録するために ClientScriptManager.RegisterForEventValidation メソッドを使用してください。

■スタックトレース:
場所 System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument)
場所 System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument)
場所 System.Web.UI.WebControls.HiddenField.LoadPostData(String postDataKey, NameValueCollection postCollection)
場所 System.Web.UI.WebControls.HiddenField.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection)
場所 System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad)
場所 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

ページを完全にロードし終わる前にボタンをクリックすると起こっているように思えるのですが、
間違っていないでしょうか。

また、これに対する対処法をご存知の方、いらっしゃいましたら教えていただけますでしょうか。

よろしくお願いします。

■環境:
ASP.NET 2.0
ASP.NET AJAX(AjaxControlToolkitも)
VB.NET 2.0
IIS 6.0

--
引用返信 編集キー/
■9935 / inTopicNo.2)  Re[1]: 「無効なポストバックまたはコールバック・・・」エラーについて
□投稿者/ カンタービレ (15回)-(2007/11/07(Wed) 18:03:11)
2007/11/07(Wed) 18:16:26 編集(投稿者)

No9933 (向井 さん) に返信
> ■エラーメッセージ:
> 無効なポストバックまたはコールバック引数です。イベントの検証は、構成の <pages enableEventValidation="true"/>、またはページの <%@ Page EnableEventValidation="true" %> を使用して有効にされます。セキュリティの目的により、この機能は、イベントをポストバックまたはコールバックする引数が、それらを最初に表示したサーバー コントロールから発行されていることを確認します。データが有効であり、予期されている場合、検証のためのポストバックまたはコールバック データを登録するために ClientScriptManager.RegisterForEventValidation メソッドを使用してください。

> ページを完全にロードし終わる前にボタンをクリックすると起こっているように思えるのですが、
> 間違っていないでしょうか。
>
> また、これに対する対処法をご存知の方、いらっしゃいましたら教えていただけますでしょうか。
>
エラーメッセージの通りな気がしますけど・・(汗)
そして、ロード完了前にポストバックした時に発生している、というのも合ってる気がしマス。

対処法もメッセージに書かれているように有効なポストバックとして扱いたいのであれば
そのASPXに<%@ Page EnableEventValidation="false" %>を加えるとそのページだけは
ポストバックが有効かどうかの判断をしなくなりマス。
サーバー全体に同じように適用したければ、web.configに
<pages enableEventValidation="false"/>を加えておけば無効になりますね。
それがいいかどうかは別問題ですけど。
http://msdn2.microsoft.com/ja-jp/library/system.web.ui.page.enableeventvalidation.aspx
では、有効にしておくことを強く推奨はしてますね。
【追記】
ゴメンナサイ上のは一番簡単な方法ですので対処法としては不適切だとは思ってマス。
対処としては、ロード完了するまでボタンを表示させないようにするか、無効にしておく、
または表示自体をロード完了まで抑止するようにするかだと思いマス。

引用返信 編集キー/
■9936 / inTopicNo.3)  Re[2]: 「無効なポストバックまたはコールバック・・・」エラーについて
□投稿者/ Jitta on the way (32回)-(2007/11/07(Wed) 18:30:48)
No9935 (カンタービレ さん) に返信
> 2007/11/07(Wed) 18:16:26 編集(投稿者)

その他の解

可能な限り、データをシェイプアップする
ViewState が不要なコントロールは、ViewState をoff
引用返信 編集キー/
■9937 / inTopicNo.4)  Re[1]: 「無効なポストバックまたはコールバック・・・」エラーについて
□投稿者/ はつね (329回)-(2007/11/07(Wed) 18:30:51)
はつね さんの Web サイト
No9933 (向井 さん) に返信
> ページを完全にロードし終わる前にボタンをクリックすると起こっているように思えるのですが、
> 間違っていないでしょうか。

その通りです。


> また、これに対する対処法をご存知の方、いらっしゃいましたら教えていただけますでしょうか。

セキュリティのために実装されている機能ですので、その部分のセキュリティがいるのかいらないのかによって答えは自ずと変わってきます。


引用返信 編集キー/
■9939 / inTopicNo.5)  Re[3]: 「無効なポストバックまたはコールバック・・・」エラーについて
□投稿者/ 向井 (15回)-(2007/11/07(Wed) 19:42:47)
みなさんご回答ありがとうございます。

カンタービレさんがご紹介して下さったmicrosoftのページですが、
具体的にどんな問題があるのかよくわかりません。。

「アプリケーションに意図しない影響を与えるポストバック」とはどのようなものをさすのでしょうか。
これまで動作していたものが動作しなくなる類のものなのでしょうか。(ポストバックされないなど)
それともセキュリティ的な問題ですか?
ちなみにセキュリティの問題とはどんなものでしょうか。
悪意のあるユーザがスクリプト攻撃できてしまうということをさすのでしょうか?
そういう意味では完全に社内システムですので問題ないと思っています。

画面を軽くする、というお話ですが、
これは非常に小さな画面でもタイミングが合えば起こってしまいます。



引用返信 編集キー/
■9941 / inTopicNo.6)  Re[4]: 「無効なポストバックまたはコールバック・・・」エラーについて
□投稿者/ はつね (330回)-(2007/11/07(Wed) 20:11:05)
はつね さんの Web サイト
No9939 (向井 さん) に返信
> 「アプリケーションに意図しない影響を与えるポストバック」とはどのようなものをさすのでしょうか。

=ちゃんと画面を描画するまえにポストバックされた


> 画面を軽くする、というお話ですが、
> これは非常に小さな画面でもタイミングが合えば起こってしまいます。

画面の大きい小さいではありません。
例えばTableタグをつかっているとブラウザでの画面の組み立てに時間が掛かったりしますので、重たい画面に分類されたりもします。

引用返信 編集キー/
■9943 / inTopicNo.7)  Re[4]: 「無効なポストバックまたはコールバック・・・」エラーについて
□投稿者/ カンタービレ (16回)-(2007/11/07(Wed) 20:29:20)
No9939 (向井 さん) に返信
> 「アプリケーションに意図しない影響を与えるポストバック」とはどのようなものをさすのでしょうか。
> ちなみにセキュリティの問題とはどんなものでしょうか。
> 悪意のあるユーザがスクリプト攻撃できてしまうということをさすのでしょうか?
> そういう意味では完全に社内システムですので問題ないと思っています。
>
> 画面を軽くする、というお話ですが、
> これは非常に小さな画面でもタイミングが合えば起こってしまいます。
>
>
>
まず社内システムだから安全という理屈は開発者・利用者両方の立場でも成り立たないと思いマス。

信用の出来ないポストバックで動作を許した場合、ポストデータの改ざんなどによって本来あるべきでない
処理が動いてしまう可能性をユーザーに与えていると考えてみてください。
もしくは無意識でもユーザーが使ってるときに意図せず送信され、プログラマが意図しなかったような処理が
実行されてしまった時に問題がないのかどうかを考えてみてください。
私はちょっと怖いと思っちゃいマス。

http://www.microsoft.com/japan/msdn/net/aspnet/securitybarriers.aspx
にWEB攻撃の簡単な説明(?)があるのでご参考になれば幸いデス。
なんかMS宣伝ページを紹介してるようでちょっと嫌になりますが・・(笑)

引用返信 編集キー/
■9949 / inTopicNo.8)  Re[2]: 「無効なポストバックまたはコールバック・・・」エラーについて
□投稿者/ はつね (331回)-(2007/11/07(Wed) 21:15:57)
はつね さんの Web サイト
後学のために教えて下さい。

No9935 (カンタービレ さん) に返信
> または表示自体をロード完了まで抑止するようにするかだと思いマス。

これは、Page_PreLoadイベントで抑止を行い、Page_LoadCompleteイベントなどを使って抑止を解除すればいいのでしょうか。
試してみたんですが、そもそもこの例外が起きるような業務アプリ画面が手持ちの開発プロジェクトの中にないし、例外起すようなサンプルがつくれなくて検証できない(笑)。


引用返信 編集キー/
■9953 / inTopicNo.9)  Re[3]: 「無効なポストバックまたはコールバック・・・」エラーについて
□投稿者/ カンタービレ (19回)-(2007/11/07(Wed) 23:17:43)
2007/11/07(Wed) 23:22:10 編集(投稿者)

No9949 (はつね さん) に返信
> 後学のために教えて下さい。
>
> ■No9935 (カンタービレ さん) に返信
>>または表示自体をロード完了まで抑止するようにするかだと思いマス。
>
> これは、Page_PreLoadイベントで抑止を行い、Page_LoadCompleteイベントなどを使って抑止を解除すればいいのでしょうか。
> 試してみたんですが、そもそもこの例外が起きるような業務アプリ画面が手持ちの開発プロジェクトの中にないし、例外起すようなサンプルがつくれなくて検証できない(笑)。
>
>
検証は私も試したデス。でもはつねサマ同様に再現サンプルは無理でした。表示されてすぐクリックしたけど既に読み込み完了・・。

向井サマの環境ではAJAXも使っているようですので、AJAXでのバックグラウンド操作が起因している可能性が高いかも知れません。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35736&forum=7&5
〜ドロップダウンリストに加えると無効なポストバックが発生〜
> これは非常に小さな画面でもタイミングが合えば起こってしまいます。
という点でも上記掲示板内容の類似事象と考えると納得できマス。

表示抑制は失笑を買いそうですが、簡単な方法がよいかと思い、単純にJavaScript等で読み込み中はページの表示を隠してしまう
というつもりで書きました。(汗)
divタグなどで読み込み中はvisible=falseにしておき、読み込み完了時にtrueにして見せるっていう・・(*ノωノ)

でも、AJAXの操作の問題だったら、読み込み中にいくら隠しても意味ないデスね(笑)
引用返信 編集キー/
■9958 / inTopicNo.10)  Re[4]: 「無効なポストバックまたはコールバック・・・」エラーについて
□投稿者/ はつね (332回)-(2007/11/08(Thu) 01:29:43)
No9953 (カンタービレ さん) に返信
> 向井サマの環境ではAJAXも使っているようですので、AJAXでのバックグラウンド操作が起因している可能性が高いかも知れません。

ASP.NET AJAX使っている業務アプリでも試してみたのですが、やっぱり発生しないのですよ。400行とかワザとだしてみたんですが、AJAXを使っているからなのか400行くらいじゃでないのかはわからないですが。
# さすがにAJAXはずしちゃうところまではイジリたくなかったw


> http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35736&forum=7&5

ここもサーバーコントロールにしている事でかいけつしているみたいですし、たぶん、ASP:なコントロールじゃないやつに動的変更加えているとダメってことなんじゃなかろうかと推測もしているのですが、例外がでないことには始まらない。。。。


> divタグなどで読み込み中はvisible=falseにしておき、読み込み完了時にtrueにして見せるっていう・・

なるほど。

引用返信 編集キー/
■9965 / inTopicNo.11)  Re[5]: 「無効なポストバックまたはコールバック・・・」エラーについて
□投稿者/ 向井 (16回)-(2007/11/08(Thu) 09:57:15)
皆様さまざまなコメント誠にありがとうございます。
とても感謝いたします。

AJAXについてですが、これを導入するまでは今回のエラーが
発生しておりませんでしたので、関係ありそうです。

その画面自体にはAJAXリクエストを送信するコントロールを置いていませんが、
使用しているマスターページ上にScriptManagerやUpdateProgressなどが置かれています。

tableタグに描画速度の問題があることは初耳です。ありがとうございます。
確かに問題ありそうです。
検索条件用の項目4つと検索ボタン、閉じるボタンが存在するシンプルな画面なのですが、
マスターページを使用していることや体裁を整えやすくする目的で、
tableタグが3つほどネストしてあったりします。

サーバコントロールでの解決案ですが、私には当てはまらない気がしました。
javascriptで動的に何かを生成する処理は特にありませんので。
私の場合は、ページのボタンをとにかく早くクリックする、というだけでエラーが発生します。

皆様再現に多大なお時間を割いて頂きありがとうございます。
実はこちらでもなかなか再現できません。
これまでの経験では、すばやい操作を続けていると十日に一度ぐらいの確率でこのエラーが起こります。
なので、Ajaxさえあればエラー発生の舞台は整っているのではないかと思います。
(ScriptManagerやUpdateProgressだけでよいと思います)

社内システムだから安全、という話は確かに私の認識が甘いのかもしれません。
ただ、現状不正なデータを悪意をもって作りこむユーザはいないのに対し、
このエラーは本番稼働してから複数回起こっています。
enableEventValidationをfalseにすることで副作用なくエラーを抑制できるならそうしたい考えです。

しかし話を伺っていると十分副作用がありそうに思えます。
今回のエラーはViewStateとの比較によって不一致を検知し発生しているのですよね。
ならば、postされてくるViewStateか画面の各項目の値のどちらかに欠損のようなものがあるということですよね。
であれば、エラーを抑制しても、その後のサーバサイドのビジネスロジックのどこかで必ず変なことになりそうですよね。
ならばEnableeventValidationをfalseになんて事実上できないということに思えます。
いかんせん自分の意思で再現できないので試しようがないのですが。

Global.asaxでこのエラーをキャッチし、その場合は何もせずそのままResponseを返せばどうなるのでしょうか。
まだRender処理がなされる前なので真っ白な画面が返ってしまいますか?
post前の画面が返るのであれば、あとはそこに「もう一度やってください」みたいなalertでも入れられれば一応の解決にはなりそうですが。


引用返信 編集キー/
■9971 / inTopicNo.12)  Re[6]: 「無効なポストバックまたはコールバック・・・」エラーについて
□投稿者/ カンタービレ (23回)-(2007/11/08(Thu) 11:13:48)
No9965 (向井 さん) に返信
> サーバコントロールでの解決案ですが、私には当てはまらない気がしました。
> javascriptで動的に何かを生成する処理は特にありませんので。
> 私の場合は、ページのボタンをとにかく早くクリックする、というだけでエラーが発生します。
>
> なので、Ajaxさえあればエラー発生の舞台は整っているのではないかと思います。
> (ScriptManagerやUpdateProgressだけでよいと思います)
>
本番稼動中、頻度が少ない、という点から原因の特定が難しい状況なんデスね。
デバッガによる再現実行も出来ないでしょうから、推測を頼りに疑わしい点を潰すしかないと思いますが
Submitが2回発生していたりはしないでしょうか?
#早くクリックというと連打してたりするのかなと想像・・・。
Submitボタンの多重クリックによって2回目のイベント時にエラーという可能性もあるかもと思った次第デス。
JavaScriptでSubmit時に判断するようにしないといけないのが微妙ですけど。
でも、これの判定でalertなどが出るようにして、ポップアップすることがあればぁゃιぃかも。

> Global.asaxでこのエラーをキャッチし、その場合は何もせずそのままResponseを返せばどうなるのでしょうか。
> まだRender処理がなされる前なので真っ白な画面が返ってしまいますか?
> post前の画面が返るのであれば、あとはそこに「もう一度やってください」みたいなalertでも入れられれば一応の解決にはなりそうですが。
>
>
Responseのスルーではなく単純に現在の画面に移動してあげれば見た目は変化なしかと。一度エラー画面へ遷移なども考えられマス。
ただなんとなくオーバーヘッドの高いことをサーバサイドで行うのは躊躇いますケド。

引用返信 編集キー/
■9978 / inTopicNo.13)  Re[6]: 「無効なポストバックまたはコールバック・・・」エラーについて
□投稿者/ はつね (333回)-(2007/11/08(Thu) 13:09:53)
はつね さんの Web サイト
No9965 (向井 さん) に返信
> その画面自体にはAJAXリクエストを送信するコントロールを置いていませんが、
> 使用しているマスターページ上にScriptManagerやUpdateProgressなどが置かれています。

AJAXは必要な箇所にのみいれた方がいいと思います。
よって、マスターページにAJAX関連のコントロールは貼らないのが正解かと。


> tableタグに描画速度の問題があることは初耳です。ありがとうございます。

tableタグを見栄えのために使わずスタイルシートなどで整えるだけでもブラウザの表示スピードが向上したりします。
tableタグの入れ子とかブラウザによっては解釈遅そうですね。


> これまでの経験では、すばやい操作を続けていると十日に一度ぐらいの確率でこのエラーが起こります。
> なので、Ajaxさえあればエラー発生の舞台は整っているのではないかと思います。
> (ScriptManagerやUpdateProgressだけでよいと思います)

ScriptManagerやUpdateProgressの設置場所をマスターページから移動するだけでも解決しそう(個人的には、設置場所間違えているように思えます)。
で、多分、AJAXはずしても現在のままであれば、ブラウザによっては同じエラーに遭遇する気がします。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -