1

ValidateRequest =デフォルトではtrueであるため、デフォルトでは、どの入力フィールドにも「<」または「>」を入力できないことを発見しました。

XSS攻撃についてあまり知らないので、私にとっては非常に制限的なようです。

これを回避するために、validateRequest = falseを使用して、ユーザーデータをエンコードできることに気付きました。明らかに、MicrosoftにはvalidateRequest = trueを設定する正当な理由があるため、問題は、サイト全体に多数のページがあり、すべてが「<または>の問題を設定できない」ということです。

私の質問は、2つの選択肢しかないのですか?

1)validateRequest = trueのままにして、ユーザーが<または>を入力できないようにします。2)validateRequest = falseに切り替えて、予防策を講じます。

2の場合、すべてのデータ入力をエンコードすることを意味しますか?ログインやパスワードからユーザーテキスト、検索条件までのテキストフィールドのように?それとも、一部の入力に対してのみ実行する必要がありますか?もしそうなら、どのフィールドをターゲットにすべきですか?

4

2 に答える 2

1

私はこれと同じ問題に遭遇し、ここでスタックオーバーフローに関する答えを見つけました:
潜在的に危険なRequest.Form値がクライアントから検出されました

マークされた回答の上位コメントを読んでください。
.net 4.0フレームワークを使用しているため、これがWeb.Configで使用しているものです。

<httpRuntime requestValidationMode="2.0" />

次に、ページごとにValidateRequest="false"を追加します。

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/Site.Master"
    AutoEventWireup="true" CodeBehind="ScheduleAppointment.aspx.cs"
    Inherits="DentalPower.Pages.Public.ScheduleAppointment"
    ValidateRequest="false" %>

Asp.net TexBoxesに、送信前に入力を自動的にエンコードするForceEncodeプロパティをtrueに設定できる機能があれば便利です。多分彼らはそれをするでしょう...いつか。

ああ、検証を無効にしたページのWebコントロールからのすべての入力を常にエンコードします。

于 2011-05-25T01:05:34.713 に答える
0

私の知る限り、あなたは正しいです。検証をオンのままにするか、手動で実行します。問題は、デフォルトの検証が非常に厳密であり、多くの状況で実用的ではないことです(私が見た多くのウェブアプリは、結果をあまり考慮せずにサイト全体でそれをオフにするだけです)。

参考までに、コードエスケープに関する優れた記事はhttp://wonko.com/post/html-escapingです。

于 2011-05-25T04:31:19.433 に答える