【问题标题】:Securing against JS injection with ASP.NET MVC使用 ASP.NET MVC 防止 JS 注入
【发布时间】:2011-06-28 07:27:29
【问题描述】:

我希望允许用户将 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;
    }
}

这就够了吗? 你如何检查这种调皮?

【问题讨论】:

    标签: javascript asp.net-mvc validationattribute


    【解决方案1】:

    看看Microsoft AntiXSS library。它拥有一个 AntiXSS.GetSafeHtmlFragment() 方法,该方法返回去除所有 XSS 不良的 HTML。

    正如 David 所指出的,白名单始终是可行的方法。 AntiXSS 使用对 XSS 安全/过滤掉 JavaScript 的 HTML 元素/属性的白名单。

    【讨论】:

      【解决方案2】:

      这就够了吗?

      没有。这是一个黑名单。黑名单是远远不够的。

      没有。它是一个正则表达式。正则表达式在处理任意 HTML 时是垃圾。

      你会怎么检查这种淘气?

      适当的 HTML 解析器与白名单相结合。

      【讨论】:

        【解决方案3】:

        Jeff Atwood 就重构我的代码对这个话题进行了很好的讨论。绝对值得花时间去看看:http://refactormycode.com/codes/333-sanitize-html

        最终的重构版本应该非常可靠。安全性从来都不是 100% 的事情,但这可能比大多数其他漂浮的例子要好。

        【讨论】:

        • 谢谢,必须为 html5 更新白名单,但这是一个很好的开始
        猜你喜欢
        • 2017-09-05
        • 2014-07-06
        • 2019-06-22
        • 2011-04-30
        • 2013-02-28
        • 2017-12-05
        • 2017-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多