验证用户输入HTML子集

时间:2012-02-27 21:24:07

标签: javascript ruby-on-rails validation

我正在寻找验证用户输入HTML的方法,类似于您在评论表单中看到的内容。用户的输入应限于最基本的标签,例如p,ul,li,div,img。唯一允许的属性是样式。

验证可以通过客户端,通过Javascript或服务器端,通过Ruby进行。我希望找到一个可以做到这一点的Javascript库,或者至少找到几个RegEx来做到这一点。

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

您可以使用Sanitize过滤HTML。

使用您在问题中列出的示例元素,您将在验证代码中使用以下内容:

Sanitize.clean(html,
    :elements => ['p', 'ul', 'li', 'div', 'img'],
    :attributes => {'
        'all' => ['style']
    }
)

正如我在上面的评论中提到的那样,允许style属性可能会很危险,尤其是如果您允许使用<a>标记,那么如果用户创建了一个不可见的攻击,则会导致clickjacking次攻击覆盖整个页面的链接。

如果您确实要允许<a>代码,我建议您完全禁止style,并可能将rel=nofollow添加到用户提供的链接中:

Sanitize.clean(html,
    :elements => ['p', 'ul', 'li', 'div', 'img', 'a'],
    :add_attributes => {
      'a' => {'rel' => 'nofollow'}
    }
)