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

时间:2015-04-27 22:02:59

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

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

网站:ASP.net,SQL Server 2012

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

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

例如,用户可以键入 WYSIWYG textarea,使某些内容变粗,或者创建项目符号等。

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

循环查看方案列表的UDF怎么样?我很好奇处理那个页面上提到的看似偷偷摸摸的最好方法:

引用:

攻击者可以使用HTML属性(如src,lowsrc,style和href)与前面的标记一起注入跨站点脚本。例如,标记的src属性可以是注入源,如以下示例所示。

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

攻击者还可以使用<style>标记通过更改MIME类型来注入脚本,如下所示。

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

最终有两个问题:

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

2 个答案:

答案 0 :(得分:7)

  
      
  1. 从INSERT语句本身处理此问题的最佳方法。
  2.   

无。那不是你应该去的地方。

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

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

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

答案 1 :(得分:0)

  

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

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

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

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

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

请注意,这些都应该在输出点完成。存储文本&#34;按原样#34;在数据库中,只需在输出到页面时编码并处理正确的格式。