我正在寻找一种验证用户输入HTML的方法,类似于您在评论表单中看到的内容。用户的输入应限制为最基本的标签,如p,ul,li,div,img。唯一允许的属性是样式。验证用户输入HTML子集
验证可能发生在客户端,通过Javascript或服务器端,通过Ruby。我希望找到一个可以做到这一点的Javascript库,或者至少找到几个RegEx来做到这一点。
感谢您的建议。
我正在寻找一种验证用户输入HTML的方法,类似于您在评论表单中看到的内容。用户的输入应限制为最基本的标签,如p,ul,li,div,img。唯一允许的属性是样式。验证用户输入HTML子集
验证可能发生在客户端,通过Javascript或服务器端,通过Ruby。我希望找到一个可以做到这一点的Javascript库,或者至少找到几个RegEx来做到这一点。
感谢您的建议。
您可以使用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'}
}
)
这可能正是我想要的。谢谢!我会给它一个旋风。 – tmo256 2012-02-28 00:19:19
你需要验证在服务器端,无论你是否有客户端 - 方面验证。绝对没有什么能够阻止用户摆脱脚本(例如通过Firebug)来解决客户端验证问题。有了这个说法,客户端验证会使页面更加友好。 – 2012-02-27 21:27:27
样式可以是一个危险的属性,除非您限制它可以操作的属性。由于您不允许使用''标签,因此它不能用于点击插入,但仍可用于其他类型的恶作剧,如覆盖整个页面:'Nothing to see here. ' –
2012-02-27 21:41:16