2

私は非常に奇妙な問題を抱えています。追跡するのにしばらく時間がかかりました。基本的に、データベースから一連の TextBox にデータをロードすると、Microsoft JScript ランタイム エラー ポップアップが表示されます。

Sys.Observer.RaiseEvent(this, "endRequest", eventArgs) の後にスローされます。このエラーは無視できることがわかりましたが、スローされた後、更新パネル内でポストバックがトリガーされません。ボタンが機能せず、AutoPostbacks のあるリストボックスが起動しません。

そのため、最終的には 1 つのテキスト ボックスにまでたどり着きます。入力しなければ、すべて正常に動作します。

textbos には次の情報が入力されていました。

    MO-SU 0700-0230        <<SEE GEN INFO>>        <<HRS T-1 ONLY>>

私の最初の考えは、そこにエスケープ文字があるか、更新パネルを台無しにしている何かがあるに違いないということでした。「<<」と「>>」を削除するつもりですが、なぜこれが発生したのか誰か説明できるかどうか疑問に思っていました.

4

2 に答える 2

2

<<&これにより>>、部分的な投稿はサーバーによる XSS 攻撃と見なされます。文字列を含むテキストボックスをロードする<>、次回サーバーに投稿され、<script>タグも < > 文字で開始/終了するため、サーバーは XSS 機密文字をチェックし、リクエストを拒否します。データを投稿し、サーバー コントロールにデータをロードするときに、asp.net で提供されるHTTPUtility.HtmlEncodeAndメソッドを使用して、このようなデータを投稿することは常に良いことです。HTTPUtility.HtmlDecode次の例を参照してください:-

string DecHtml = HttpUtility.HtmlDecode(value1);
string EncHtml = HttpUtility.HtmlEncode(value2);

HTML についての詳細情報を検索入力をエンコードする XSS について理解したい場合は、これに従う必要があります

幸いなことに、ASPX のページ ディレクティブ内で検証をオフにすることができます。

<%@ Page Language="C#" MasterPageFile="~/Site.Master"
AutoEventWireup="true" CodeBehind="webpage.aspx.cs"
Inherits="Web.webpage" Title="webpageSite" ValidateRequest="false" %>

または、web.config 内のサイト全体で要求の検証をオフにすることもできます。

<pages validateRequest="false" />

.NET 4.0 の場合、.NET 4 リクエスト検証モードで実行中にページ レベルでオフにすることはできなくなりました。検証を無効にするには、web.config に 2.0 検証モードに戻るように要求する必要があります。

<httpRuntime requestValidationMode="2.0" />

率直に言って、サイトのすべてのページからこのセーフティ ネットを削除する十分な理由がない限り、これは賢明な考えではありません。したがって、私見の最善のアプローチは、可能な限りエンコードとデコードを使用することです。詳細はこちら

于 2012-11-29T09:56:40.427 に答える
1

ページ設定ValidateRequestMode を変更しますが、攻撃を防ぐためにすべてのユーザー入力を手動でチェックする必要があります。

于 2012-11-29T09:54:23.927 に答える