0

ユーザーがHTMLをサイトに投稿できるようにしたいのですが、サイトにJavascriptが挿入されていないことを確認する必要があります。

これまでのところ、受信したhtmlで危険な動作をチェックするための検証属性を作成しました

[AttributeUsage(AttributeTargets.Property, 
    AllowMultiple = false, Inherited = true)]
public class CheckHtml : ValidationAttribute, IMetadataAware {

    private static Regex _check = new Regex(
        @"<script[^>]*>.*?<\/script>|<[^>]*(click|mousedown|mouseup|mousemove|keypress|keydown|keyup)[^>]*>",
        RegexOptions.Singleline|RegexOptions.IgnoreCase|RegexOptions.Compiled);

    protected override ValidationResult IsValid(
        object value, ValidationContext validationContext) {

        if(value!=null
            && _check.IsMatch(value.ToString())){

            return new ValidationResult("Content is not acceptable");
        }

        return ValidationResult.Success;
    }

    /// <summary>
    /// <para>Allow Html</para>
    /// </summary>
    public void OnMetadataCreated(ModelMetadata metadata) {
        if (metadata == null) {
            throw new ArgumentNullException("metadata");
        }
        metadata.RequestValidationEnabled = false;
    }
}

これで十分ですか?そのようないたずらをチェックするためにあなたは何をしますか?

4

3 に答える 3

3

MicrosoftAntiXSSライブラリをご覧ください。AntiXSS.GetSafeHtmlFragment()これは、すべてのXSSの悪さを取り除いたHTMLを返すメソッドを誇っています。

デビッドが指摘したように、ホワイトリストは常に進むべき道です。AntiXSSは、XSSに対して安全なHTML要素/属性のホワイトリストを使用し、JavaScriptを除外します。

于 2011-02-16T12:30:17.097 に答える
2

これで十分でしょうか?

いいえ、ブラックリストです。ブラックリストだけでは十分ではありません。

いいえ、正規表現です。正規表現は、任意の HTML を処理する上ではゴミです。

そんなイタズラをチェックしてどうするの?

ホワイトリストと組み合わせた適切な HTML パーサー。

于 2011-02-16T12:02:58.117 に答える
0

Jeff Atwood は、私のコードのリファクタリングについて、このトピックについて素晴らしい議論をしました。ぜひチェックしてみてください: http://refactormycode.com/codes/333-sanitize-html

最終的なリファクタリングされたバージョンはかなり安定しているはずです。セキュリティは決して 100% のタイプのものではありませんが、これはおそらく、出回っている他のほとんどの例よりも優れています。

于 2011-02-16T11:58:05.977 に答える