【发布时间】:2011-05-08 19:37:53
【问题描述】:
我有一个博客驱动的 ASP.NET 网站。 在帖子下方,有一个评论区,让读者发表cmets。
为此,我使用了一些 TextBoxes 和 TextArea。
防止 XSS:
我已经使用:Server.HtmlEncode() 方法过滤了输入(我不关心文本格式)。
防止 SQL 注入:
我正在使用 Linq To SQL(我认为这应该类似于参数化查询!)。
我现在安全吗?
因为我在页面指令中设置了 ValidateRequest="false"。
代码如下:
ArticlesDataClasses dc = new ArticlesDataClasses();
ArticleComment newComm = new ArticleComment()
{
ArticleID = int.Parse(Request.QueryString["ArticleID"]),
CommentAuthor = Server.HtmlEncode(txtName.Text),
CommentText = Server.HtmlEncode(txtComment.InnerHtml).Replace("\n", "<br />"),
CommentAuthorEmail = Server.HtmlEncode(txtMail.Text),
CommentTime = DateTime.Now,
Enabled = false
};
dc.ArticleComments.InsertOnSubmit(newComm);
dc.SubmitChanges();
谢谢..
【问题讨论】:
-
它听起来就像你的保险箱,但你能展示代码来将评论保存到数据库吗?这是最重要的部分。 (用于防止 SQL 注入)
-
谢谢,RPM1984,我已经编辑了帖子并放置了代码。
-
是的,你的保险箱。不过提示一下,您应该在其他地方进行最后一分钟的编码(而不是在插入的代码中)。一方面,如果
ArticleIDQS 不是 INT,int.Parse将抛出异常。应该在那里使用 TryParse,是的,在保存之前清理输入。但总的来说,你看起来还不错。 -
看起来不错。 OWASP 提供了一个很棒的开源 Web 应用程序库,称为 ESAPI,owasp.org/index.php/Category:OWASP_Enterprise_Security_API。 Security Compass 还为 FF 提供了 XSS Me 和 SQL Inject 插件。
-
感谢 RPM1984 的建议,但编码的最佳地点在哪里?
标签: asp.net xss sql-injection