0

Considering issues like CSRF, XSS, SQL Injection...

Site: ASP.net, SQL Server 2012

I'm reading a somewhat old page from MS: https://msdn.microsoft.com/en-us/library/ff649310.aspx#paght000004_step4

If I have a parametrized query, and one of my fields is for holding HTML, would a simple replace on certain tags do the trick?

For example, a user can type into a WYSIWYG textarea, make certain things bold, or create bullets, etc.

I want to be able to display the results from a SELECT query, so even if I HTMLEncoded it, it'll have to be HTMLDecoded.

What about a UDF that cycles through a list of scenarios? I'm curious as to the best way to deal with the seemingly sneaky ones mentioned on that page:

Quote:

An attacker can use HTML attributes such as src, lowsrc, style, and href in conjunction with the preceding tags to inject cross-site scripting. For example, the src attribute of the tag can be a source of injection, as shown in the following examples.

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

An attacker can also use the <style> tag to inject a script by changing the MIME type as shown in the following.

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

So ultimately two questions:

  1. Best way to deal with this from within the INSERT statement itself.
  2. Best way to deal with this from code-behind.
4

3 回答 3

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

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

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

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

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

于 2015-04-27T22:15:38.003 回答
0

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

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

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

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

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

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

于 2015-04-28T10:13:47.760 回答
0

在将任何字符串填充到 SQL 之前,在客户端和服务器上清理 html。

客户端: TinyMCE - 自动 执行CKEditor - 自动执行

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

于 2015-04-29T23:13:03.053 回答