使用户发布的博客评论安全

时间:2011-03-10 08:14:59

标签: asp.net html

我正在我的网站上创建博客引擎。没有什么花哨。用户将注册一些基本信息,包括评论本身就是这个问题的问题。

在评论字段中,用户可以写一些文字,但目前没有什么可以阻止他写任何有害的东西,这会在用评论渲染时弄乱页面。

所以我想知道完成这三项任务的最简单方法是什么(希望.NET中内置的东西:) :)

  • 确保在文本框中没有写入有害的html来运行脚本,或者只是在添加注释后让所有用户都为该页面呈现错误。
  • 我仍然希望接受<a><b>等标签,以便用户可以格式化他的文字,并提供链接。
  • 应该遵守消息中的任何换行符,以便在用户将其写入时呈现为html时,注释看起来相同。目前,所有换行符都被忽略,作为html内容的标准。

2 个答案:

答案 0 :(得分:1)

我最好的建议是使用维基代码或公告板代码(BBCode)。

在我的一个个人项目中的一些自定义开发中,我使用的是一个名为“Codekicker BBCode”的Codeplex项目,它是一个解析器引擎,因此您可以在评论组成文本输入中使用BBCode:

扩展其语义并添加更多BBCode标签并不难,但开箱即用的标签足以满足您的要求 - 或者我猜是这样! -

我从未集成过维基代码引擎,但您可以下载Screwturn Wiki的源代码并删除维基代码解析器并在您自己的解决方案中使用 - 它是GPL,不是吗?如果您留下作者通知和许可证,您可以这样做! - :

您可以允许标准的XHTML / HTML元素,但最好使用这样的解析器。

我的观点是维基代码解析器比BBCode好,但也许你的要求和BBCode可以有一个很好的婚姻:)

答案 1 :(得分:1)

您希望确保在向数据库添加值时使用正确的方法以避免SQL注入,我建议您阅读How To Protect from SQL Injeciton in ASP.NET上的MSDN文章。

如果您希望允许用户自行格式化代码,则可以打开漏洞利用程序,而且您肯定不得不多考虑一次。首先,您要确保每个标记都有匹配的结束标记。因为如果有人写道:<strong>Hello!你不希望之后的所有文字都是粗体。

为了帮助您实现这一点,您可以使用几个不同的库,这些是我推荐的两个方法/库:

您可以使用允许用户编写[粗体]文本[/ bold]的方法,然后在其他所有内容上使用名为Html Encoding的内容。所以如果你写下面的内容:

<strong>this will not be in bold</strong>[bold]But this will![/bold]

输出可能是:

<strong>this will not be bold</strong> 但这会!

按照以下步骤操作:

  • HTML编码文字
  • 用适当的HTML
  • 替换您的BB代码标签([粗体]和不是)

关于换行符,您需要将\r\n替换为<br />,请检查Html Agility Pack或使用String.Replace

您可能还想阅读Jeffs blog post about Safe HTML and XSS