2

私がこれを正しく行っているかどうかはわかりません。
ページへの攻撃を防ぐために初めて何かを構築します。
私は下から始めます:
私は財産を持っています:

public string Description {get;set;}

ユーザーはtinyMCEを介して値を設定できます

tinyMCE.init({
            mode: "textareas",
            theme: "advanced",
            encoding : "xml"...

これをデータベースに保存する前に、コントローラーで次のことを行います。

model.Description = HttpUtility.HtmlDecode(model.Description);

データベースには、次のような値があります。

<p>bla bla bla</p>

プロジェクトに AntiXSS ライブラリを追加しました。

public class AntiXssEncoder : HttpEncoder
    {
        public AntiXssEncoder() { }

        protected override void HtmlEncode(string value, TextWriter output)
        {
            output.Write(Encoder.HtmlEncode(value)); // on breakpoint code always get in here
        }
...

データベースからデータを表示するときは、次を使用します。

@Html.Raw(Model.Place.Description)

そして、それは正常に機能します。テキストしか表示されません。Html タグはありません。ブレークラインは正常に機能します。太字、斜体などでテキストのスタイルを設定できます。

しかし、私が入力した場合:

<script>alert(open to attack);</script>


アラートウィンドウが表示されました。
これを防ぐためにもっと何かをする必要があるのか​​ わかりませんか?

4

2 に答える 2

5

プロジェクトにAntiXSSライブラリを追加しました

そして、どこでそれを使用していますか?

AntiXSSを追加しただけでなく、実際に使用したことを確認してください。

@Html.Raw(Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment(Model.Place.Description))

ただし、AntiXSSライブラリの新しいバージョンは制限が厳しすぎて、望ましくない可能性のあるタグ<strong>を削除することを忘れないでください。<br>

AntiXSSライブラリの代わりに、HTMLAgilityPackを使用してこの作業を行うことができます。リック・シュトラールblogged about a sample implementation

于 2013-01-30T21:29:06.130 に答える
1

まず、RAWHtmlを表示しています-どのような方法でもエンコードされていません。Htmlを表示したい場合は、理想的にはいくつかのことを行う必要があります。

  1. GetSafeHtmlFragmentを使用して、antixssSanitizerクラスでサニタイズします。これはあなたを完全に保護するものではないことに注意してください。DBに保存する前にこれを行ってください。

  2. 他のスクリプトが実行されないように、まだ完全にはサポートされていないヘッダーを実装します。これは、最新のブラウザの一部に限定されています。

  3. または...htmlを許可しないか、既知の文字タグ以外のHTMLを許可しないでください。つまり、ホワイトリストアプローチであるため、許可<strong>され、他の英数字以外は許可されません。

于 2013-01-30T21:09:44.103 に答える