【问题标题】:ASP.NET: Am I safe from SQL Injection and XSS in this situation?ASP.NET:在这种情况下,我可以避免 SQL 注入和 XSS 吗?
【发布时间】: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,我已经编辑了帖子并放置了代码。
  • 是的,你的保险箱。不过提示一下,您应该在其他地方进行最后一分钟的编码(而不是在插入的代码中)。一方面,如果ArticleID QS 不是 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


【解决方案1】:

参数和编码是主要的,但你也可以考虑跨站请求攻击,如果引用者不是你的站点,则阻止发布:

http://haacked.com/archive/2009/04/02/anatomy-of-csrf-attack.aspx

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2020-04-18
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多