【问题标题】:how to restrict HTML elements while allowing others如何限制 HTML 元素同时允许其他元素
【发布时间】:2012-01-08 21:55:09
【问题描述】:

如何在文本框中只允许某些 html 标签

例子:

    <Strong>
    <p>

下面的代码是我一直在尝试在创建的类中实现解决方案的地方。

[Required]
(Code)
Public string car { get; set; }

我将如何实施该解决方案,是否有可能在上面编写(代码)的地方。

【问题讨论】:

  • XSS 呢?这不是您要防止的吗?
  • 您这样做是为了限制 CMS 插入标记吗?从后端的角度来看,我真的不知道修复,但您可以使用 css 定位该 div 并使用 display:none 或其他一些属性来隐藏标签中的标记。例如(.divname strong {display:none;})
  • 如果插入了不允许的html标签,我需要执行错误消息。
  • 是防止 XSS(JavaScript、VBScript、ActiveX、HTM)

标签: asp.net-mvc-3 model-view-controller


【解决方案1】:

首先,您需要使用 [ValidateInput(false)] 属性为您的操作禁用验证,但您需要谨慎使用它,因为它会关闭整个方法的验证。您还可以禁用特定属性的验证,例如:

[Required]
[AllowHtml]
Public string article { get; set; }

ASP.NET MVC3 具有在属性级别禁用验证的内置属性 - 因此将 [AllowHtml] 属性放在模型或视图模型中的属性上将禁用请求验证。这是不安全的,会使您的网站处于危险之中。现在由您来确保提供正确的数据格式,因此您可能不想尝试使用正则表达式来过滤除您需要的标签之外的所有 html 代码。你可能不想看这个答案Regex to match all HTML tags except <p> and </p> 来帮助你。 msdn 中关于如何使用带有数据注释的正则表达式验证的示例:

public class Customer
{
  [Required]
  [RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$", 
      ErrorMessage="Numbers and special characters are not allowed in the last name.")]
  public string LastName { get; set; }
}

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.regularexpressionattribute(v=vs.95).aspx

您也可以尝试更安全的方法 - 实现类似 BBCode 的功能。因此,您可以使用 [b] 之类的伪 html 标签代替

来代替 html 标签

这很容易用 jQuery 完成:

假设 #text 是一个填充有 bbcode 之类的文本(不可见)的字段,并且 text2 是格式化显示 - 可见:

$(document).ready(function(){
    var text = $('#text').html();
    text = text.replace("[b]","<b>");
    text = text.replace("[/b]","</b>");
    $('#text2').html(text);
});

这不是最聪明的代码,但它可以快速向您展示您可以采取的方向。

【讨论】:

  • 正则表达式过滤掉html标签(不确定如何实现)。看过 Regex,但似乎无法理解如何在 MVC3 中实现它。
【解决方案2】:

以下正则表达式只允许指定的 Html 标记:

[RegularExpression(@"^([^<]|<p>|</p>|<strong>|</strong>|a z|A Z|1 9|(.\.))*$")}

这允许输入 html &lt;p&gt; &lt;/p&gt; &lt;strong&gt; &lt;/strong&gt; 而不允许任何其他标签。

如果需要,添加其他标签。

【讨论】:

    【解决方案3】:

    使用 AllowHtml 属性,然后使用 IValidatableObject 和 Regex 验证内容, 或编写自定义验证属性以仅允许使用 Regex 的一些 html 标记,请参阅 Phil Haack 文章http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

    【讨论】:

      【解决方案4】:
      [RegularExpression("^[^<>,<|>]+$", ErrorMessage = "Invalid entry.")]
      public string FirstName { get; set; }
      

      为了避免 mvc 错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 2019-02-08
        相关资源
        最近更新 更多