【问题标题】:Prevent injection of html tags in SQL Server database防止在 SQL Server 数据库中注入 html 标签
【发布时间】:2012-11-01 16:05:29
【问题描述】:

我在后端创建了一个带有 asp.net 3.5 和 SQL Server 2005 的网站

我们创建了管理站点,用于使用安全用户帐户更新数据库中的数据。 我为现场工作了一段时间。

一段时间后,我们发现一些特定的html 标签被插入到数据库的字符串字段中。

似乎是某种攻击

谁能建议我如何防止这种攻击。

【问题讨论】:

  • 何时以及如何将值插入数据库??
  • 我们使用直接 sql 查询在数据库中插入值。

标签: asp.net sql-server-2005


【解决方案1】:

您所拥有的可能是用于部署跨站点脚本攻击的 SQL 注入攻击。然而,这可能不是来自 asp.net 应用程序本身。默认情况下,ASP.NET Web 应用程序将打开请求验证,从而阻止可能看起来是跨站点脚本攻击的帖子(它们将在发布 HTML 时收到“危险的请求 500 错误”)。如果您已将其关闭,那么您可能会暴露自己。

您应该使用像 LINQ to Entities 这样的 ORM,或者至少对您正在执行的任何 SQL 查询使用参数化查询,这将大大有助于保护您免受 SQL 注入攻击。但是,您仍然遇到跨站点脚本的问题。查看 Microsoft AntiXSS library 以确保您受到保护。

您将遇到的另一个问题是内部人员或通过可能插入数据库的另一个应用程序(如果您将其用作公共数据库)。为此,您可以做的最好的事情是放置一个检查约束,当您在正则表达式上匹配 HTML 时会失败。查看this文章了解详情。

【讨论】:

    【解决方案2】:

    我认为这是一次跨站脚本攻击。

    您可以在应用程序级别(在配置中)将“validateRequest”设置为“true”,或者在页面指令中将其设置在页面级别。

    请阅读更多here

    【讨论】:

    • 这样的问题是,当使用任何标签时,ASP.net 会抛出异常。在我看来,这不是处理无效输入的最佳方式
    【解决方案3】:

    您应该始终对来自用户的任何输入进行编码,以防止跨站点脚本和 SQL 注入攻击。Server.HtmlDecode 和 Server.HtmlEncode 正是出于这个原因。

    最重要的是,如果您想完全阻止 Html 标签,请使用正则表达式清除不需要的标签的输入。

    【讨论】:

    • 数据应该被编码/转义适当的使用站点 - 而不是任意“插入前”。
    • 不确定你为什么要这么说?我没有说舞台是在这里还是那里,我只是说数据应该总是被编码。你所说的实际上没有任何意义
    猜你喜欢
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多