我正在寻找验证用户输入HTML的方法,类似于您在评论表单中看到的内容。用户的输入应限于最基本的标签,例如p,ul,li,div,img。唯一允许的属性是样式。
验证可以通过客户端,通过Javascript或服务器端,通过Ruby进行。我希望找到一个可以做到这一点的Javascript库,或者至少找到几个RegEx来做到这一点。
感谢您的建议。
答案 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'}
}
)