我如何防止src等属性中的XSS攻击?

c# html-agility-pack security xss

所以我一直在使用带有白名单的html敏捷性构建一个C#html清理程序。它工作正常,除了这样的情况:

<img src="javascript:alert('BadStuff');" />
<img src="jav&#x09;ascript:alert('BadStuff');"> 

我想要允许src属性,显然不是其中的恶意内容。我查找过的所有内容都推荐了一个标签及其属性的白名单。你怎么处理这样的事情呢?我知道这在任何较新的浏览器中都不起作用,但我对安全性不是很熟悉,而且我确信攻击者还可以做一些其他聪明的事情。

一般承认的答案

跨站点脚本(XSS)攻击通过注入客户端脚本代码来利用网页验证中的漏洞。使Web应用程序容易受到跨站点脚本攻击的常见漏洞包括无法正确验证输入,无法编码输出以及信任从共享数据库检索的数据。为了保护您的应用程序免受跨站点脚本攻击,假设所有输入都是恶意的。约束并验证所有输入。对可能包含HTML字符的所有输出进行编码。这包括从文件和数据库读取的数据。

当攻击者编写脚本以检索提供对可信站点的访问的身份验证cookie然后将cookie发布到攻击者已知的Web地址时,会发生跨站点脚本攻击的最严重示例之一。这使攻击者能够欺骗合法用户的身份并获取对网站的非法访问权限。

使Web应用程序容易受到跨站点脚本攻击的常见漏洞包括:

  • 未能约束和验证输入。
  • 无法编码输出。
  • 信任从共享数据库检索的数据。

方针

防止跨站点脚本攻击的两个最重要的对策是:

  • 约束输入。
  • 编码输出。

步骤摘要

要防止跨站点脚本,请执行以下步骤:

步骤1.检查是否已启用ASP.NET请求验证。

步骤2.查看生成HTML输出的ASP.NET代码。

步骤3.确定HTML输出是否包含输入参数。

第4步 。查看具有潜在危险的HTML标记和属性。

第5步 。评估对策。

有关详细信息,请参阅第2篇参

参考文献:

跨站点脚本解释:如何防止XSS攻击

如何:防止ASP.NET中的跨站点脚本


热门答案

只要您正确清理并处理输入,就可以安全地允许src属性。要执行此操作,您应首先通过有效URL字符的白名单对其进行清理,对其进行规范化 ,然后验证它是否指向有效图像。

你提到的白名单是第一步(也是重要的一步)。要实现白名单,只需删除对URL无效的每个字符。还要验证URL是否正确形成,这意味着它指向用户应该能够访问的有效资源。例如,用户不应通过传入file://sensitive.txt或其他内容来访问服务器上的本地文件。如果http或https是唯一应该使用的协议,请检查URL是否以这些协议开头。如果你是一个额外的偏执狂,你可以完全拒绝这个请求,因为很明显它已被篡改。白名单很重要,但单独使用白名单不会保证功能安全。

规范化非常重要,因为许多攻击依赖于提交最终将您带到某个位置的URL,但可能会滥用计算机天生的缺乏推理来获取它不应该的东西。这也有助于消除可能提高性能的相同资源的重复路径(或者至少允许您通过不重新检查自上次检查后未更改的已知文件来提高性能。请注意这一点,因为可以欺骗最后修改日期,以便攻击者可以在您已经“检查并信任”它之后交换恶意文件。

要验证您是否指向有效映像,请打开该文件并读入前几个字节。 不要简单地相信文件扩展名,虽然先做打开文件之前(性能和安全)检查。每种图像格式都有一定的字节模式,您可以检查。 首先要看的是JPEG 。恶意用户可能仍然可能将shellcode或其他攻击代码放入包含正确标头的图像文件中,但这样做要困难得多。这将是一个性能瓶颈,因此如果您实现这一点,请做好相应的计划。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因