脚本入侵概述

 

从浏览器的角度来看,网页只是一长串字符。浏览器按顺序处理字符串,根据特殊规则在解释其他字符时显示一些字符,例如<b>和<script>。如果恶意用户可以将某些特殊字符插入到页面中,则浏览器将不知道字符不应该在那里,并且它将作为页面的一部分处理它们。

简单的脚本漏洞利用可能如下工作。如果应用程序允许用户发布有关最新电影的评论以供其他用户阅读,则漏洞利用步骤可能是:

1,应用程序显示一个表单用户输入评论,恶意用户编写包含<script>块的评论。

2,表单已提交,恶意用户的评论存储在数据库中。

3,另一位用户访问该网站。构建页面时,它会从数据库中读取评论并将其放入页面中。恶意用户的<script>块被写入页面,就像是文字评论一样。

4,当第二个用户的浏览器显示该页面时,它将转到<script>块并执行它。

 

恶意用户还可以通过其他方式利用脚本。大多数脚本漏洞需要应用程序接受恶意输入并将其注入(或回显)到浏览器将执行的页面中。此类漏洞利用可能造成的损害取决于执行的脚本。它可能很简单,例如在浏览器中弹出的恼人信息。但它也可能通过窃取cookie,窃取用户输入(如密码),以及如果Internet安全性不严格,在用户的计算机上运行本机代码而造成严重损害。

有关防止脚本漏洞利用的信息,请参阅如何:通过将HTML编码应用于字符串来防止Web应用程序中的脚本漏洞。

ASP.NET通过检查潜在危险的字符串(例如“<!”,“</”和“<?”)来帮助防止伪装成URL的脚本漏洞。

 

脚本漏洞的变体是导致执行恶意SQL语句

防止脚本漏洞

对脚本攻击的主要防御是永远不要信任来自用户的信息。假设从浏览器发布到您的应用程序的任何数据都可能包含恶意脚本。

类似地,在将字符串写入页面的任何时候,都应该假定字符串可能包含恶意脚本(除非您自己通过编程创建了字符串)。例如,当从数据库中读取字符串时,应该假定它们可能包含恶意脚本。根据恶意用户可能找到篡改数据库的方法的理论,最具安全意识的开发人员甚至不信任他们自己的数据库。

ASP.NET为您提供了几种帮助防止脚本攻击的方法:

ASP.NET对查询字符串和表单变量以及cookie值执行请求验证。默认情况下,如果currentRequest包含HTML编码的元素或某些HTML字符(例如 - 对于em破折号),则ASP.NET页面框架会引发错误。

如果要在应用程序中显示字符串但不信任它们,请在将字符串写回响应时将HTML编码应用于它们。例如,通过编码,标签<b>变为&lt; b&gt;。如果您显示的字符串来自数据库,其内容您不确定可以信任,则可以执行此操作。

如果您希望应用程序接受一些HTML(例如,来自用户的一些格式化指令),那么您应该在将HTML提交到服务器之前在客户端对其进行编码。有关更多信息,请参见如何:通过在字符串中应用HTML编码来防止Web应用程序中的脚本漏洞。

为了防止SQL语句漏洞利用,请不要使用字符串连接创建SQL查询。而是使用参数化查询并将用户输入分配给参数对象。

始终根据一组期望值和字符串格式/类型验证来验证表单输入。例如,如果预期特定表单变量是整数,请使用Int32.TryParsemethod验证该值是否为整数,并使用范围检查来帮助确保该值在可接受的范围内。

 

How to: Protect Against Script Exploits in a Web Application by Applying HTML Encoding to Strings

 

posted on 2018-12-19 16:07  荆棘人  阅读(415)  评论(0编辑  收藏  举报

导航