2008-09-15 63 views
1

我在网页上使用了富文本编辑器。 .NET具有防止发布HTML标签的功能,所以我添加了一个JavaScript代码片段来在帖子前改变尖括号和别名字符对。该别名在服务器上用必要的尖括号替换,然后存储在数据库中。抛开XSS,解决这个问题的常见方法是什么? (即是否有更好的方法?)浏览器所见即所得最佳实践

如果您对XSS(跨站点脚本)有任何意见,我相信这将有助于某人。

回答

3

实际上有一种方法可以关闭“功能”。这将允许用户发布他们想要的任何字符,并且不需要使用Javascript将字符转换为别名。请参阅disabling request validation这篇文章。这意味着你必须做你自己的验证,但是从你的文章的声音来看,这似乎是你想要做的。您也可以通过关注the instructions here来禁用每页。

1

我的第一条评论是避免使用JavaScript来改变尖括号。绕过这与在浏览器中禁用JavaScript一样简单。几乎所有的服务器端语言都有一些实用的方法,可以将一些HTML字符转换为实体对应的字符。例如,PHP使用htmlentities(),我相信.NET有一个等效的实用方法。一般来说,您可以使用正则表达式代替尖括号,圆括号和双引号,这将为您提供一个安全解决方案。

3

我认为最安全的方法是不允许用户使用您的WISYWIG创建标签。也许使用类似本网站上的降价编辑器或available here.将是另一种方法。

还要保持Page指令ValidateRequest = true,它应该停止在请求中发送标记,您当然需要在出现时处理这个错误。人们将始终能够使用诸如Tamper data之类的Firefox扩展插入请求,但ValidateRequest = true应该至少停止ASP.NET接受它们。

杰夫最近在这里发表了一篇关于XSS攻击的直接文章。它也说明你的cookies只有HttpOnly,这是一种防止cookie被盗的半防御功能。祝你好运!

+1

是的,但Markdown的唯一问题是,它明确*允许* Markdown旁边Markdown ..这使得它相当艰难 – 2008-09-15 04:42:29