• 脚本入侵概述


    从浏览器的角度来看,网页只是一长串字符。浏览器按顺序处理字符串,根据特殊规则在解释其他字符时显示一些字符,例如<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

  • 相关阅读:
    hdu6060[贪心+dfs] 2017多校3
    Codeforces 547B. Mike and Feet[单调栈/队列]
    Codeforces 545E. Paths and Trees[最短路+贪心]
    gitignore使用
    es学习
    google浏览器安装jsonview
    sychronized关键字底层详解加锁升级过程
    idea 中 “XXX has broken path” 错误解决
    kafka高并发读写的原因
    window redis版本 安装
  • 原文地址:https://www.cnblogs.com/Tpf386/p/10143898.html
Copyright © 2020-2023  润新知