【问题标题】:What HTML tags would be considered dangerous if stored in SQL Server?如果存储在 SQL Server 中,哪些 HTML 标记会被认为是危险的?
【发布时间】:2015-07-06 13:22:40
【问题描述】:

考虑 CSRF、XSS、SQL 注入等问题...

网站:ASP.net,SQL Server 2012

我正在阅读 MS 的旧页面:https://msdn.microsoft.com/en-us/library/ff649310.aspx#paght000004_step4

如果我有一个参数化查询,并且我的一个字段用于保存 HTML,那么在某些标签上进行简单替换是否可以解决问题?

例如,用户可以在 WYSIWYG 文本区域中输入内容、将某些内容加粗或创建项目符号等。

我希望能够显示 SELECT 查询的结果,所以即使我对它进行 HTMLEncoded,它也必须是 HTMLDecoded。

循环遍历场景列表的 UDF 怎么样?我很好奇处理该页面上提到的看似偷偷摸摸的最佳方法:

引用:

攻击者可以将src、lowsrc、style、href等HTML属性与前面的标签结合使用来注入跨站脚本。例如,标签的 src 属性可以是注入源,如下例所示。

<img src="javascript:alert('hello');">
<img src="java&#010;script:alert('hello');">
<img src="java&#X0A;script:alert('hello');">

攻击者还可以使用&lt;style&gt;标签通过更改MIME类型来注入脚本,如下所示。

<style TYPE="text/javascript">
  alert('hello');
</style>    

所以最终有两个问题:

  1. 在 INSERT 语句本身中处理此问题的最佳方法。
  2. 从代码隐藏处理此问题的最佳方法。

【问题讨论】:

  • 在将字符串存储到数据库之前对其进行编码
  • 我建议使用HTML Agility Pack 来帮助解析您的HTML,并且您应该清理输出而不是输入。

标签: javascript asp.net sql-server security database-security


【解决方案1】:
  1. 从 INSERT 语句本身中处理此问题的最佳方法。

没有。那不是你应该做的地方。

  1. 从代码隐藏处理此问题的最佳方法。

使用白名单,而不是黑名单。 HTML 对所有内容进行编码,然后对允许的特定标签进行解码。

能够指定一些可以安全使用的标签是合理的,但能够捕获所有可能的漏洞利用是不合理的。

【讨论】:

    【解决方案2】:

    如果存储在 SQL Server 中,哪些 HTML 标记会被认为是危险的?

    没有。 SQL Server 不理解,也不尝试解释 HTML 标记。 HTML 标记只是文本。

    但是,如果输出到 HTML 页面,HTML 标记可能会很危险,因为它们可能包含脚本。

    如果您希望用户能够输入富文本,则应考虑以下方法:

    • 允许用户(或他们正在使用的编辑器)生成BBCode,而不是直接生成 HTML。当您输出他们的 BBCode 标记时,您会将任何可识别的标签转换为不包含包含脚本的属性的 HTML,并将任何 HTML 转换为实体(&amp;amp;&amp;amp; 等)。
    • 结合内容安全策略,使用tried and tested HTML sanitizer 从您存储的输入中删除“不安全”标记。您必须同时执行这两项操作,否则 sanitizer 中的任何间隙(并且会有间隙)都可能导致攻击,而且并非所有浏览器都完全支持 CSP (IE)。

    请注意,这些都应该在输出点完成。将文本“按原样”存储在数据库中,在输出到页面时简单地编码和处理为正确的格式。

    【讨论】:

      【解决方案3】:

      在将任何字符串塞入 SQL 之前,请先在客户端和服务器上清理 html。

      客户端: TinyMCE - 自动执行此操作 CKEditor - 自动执行此操作

      服务器端: 使用Node 或您选择的语言/平台很容易做到这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-24
        • 2021-01-01
        • 2020-04-04
        • 1970-01-01
        • 2011-11-09
        • 2023-04-07
        • 2011-11-12
        相关资源
        最近更新 更多