zoukankan      html  css  js  c++  java
  • XSS跨站脚本攻击

     XSS跨站脚本(Cross-site scripting)

    XSS其实就是Html的注入问题,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。盗用cookie,获取敏感信息,破坏正常页面结构。分为两种手段:

    反射型:xss代码出现在url中,作为输入提交到服务器,解析后返回,浏览器执行xss代码。

    代码: http://www.XXXX.com/search.asp?input=<script>alert(document.cookie);</script>  

    当受害者点击这个链接的时候,注入的脚本被当作搜索的关键词发送到目标服务器的search.asp页面中,则在搜索结果的返回页面中,这段脚本将被当作搜索的关键词而嵌入。这样,当用户得到搜索结果页面后,这段脚本也得到了执行。这就是反射型XSS攻击的原理,可以看到,攻击者巧妙地通过反射型XSS的攻击方式,达到了在受害者的浏览器上执行脚本的目的。由于代码注入的是一个动态产生的页面而不是永久的页面,因此这种攻击方式只在点击链接的时候才产生作用,这也是它被称为非持久型XSS的原因。

    攻击目的:

    a. 盗用 cookie ,获取敏感信息。

    b.利用植入 Flash ,通过 crossdomain 权限设置进一步获取更高权限;或者利用Java等得到类似的操作。 

    c.利用 iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。 

    d.利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。

    e.在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。

    漏洞的防御和利用:

    避免XSS的方法之一主要是将用户所提供的内容进行编码,过滤,校正

    来自应用安全国际组织OWASP的建议,对XSS最佳的防护应该结合以下两种方法:验证所有输入数据,有效检测攻击;对所有输出数据进行适当的编码,以防止任何已成功注入的脚本在浏览器端运行。具体如下:

    输入验证:某个数据被接受为可被显示或存储之前,使用标准输入验证机制,验证所有输入数据的长度、类型、语法以及业务规则。

    强壮的输出编码:数据输出前,确保用户提交的数据已被正确进行entity编码,建议对所有字符进行编码而不仅局限于某个子集。

    明确指定输出的编码方式(如ISO 8859-1或 UTF 8):不要允许攻击者为你的用户选择编码方式。

    注意黑名单验证方式的局限性:仅仅查找或替换一些字符(如"<" ">"或类似"script"的关键字),很容易被XSS变种攻击绕过验证机制。

    警惕规范化错误:验证输入之前,必须进行解码及规范化以符合应用程序当前的内部表示方法。请确定应用程序对同一输入不做两次解码。

  • 相关阅读:
    C++笔记(2018/2/6)
    2017级面向对象程序设计寒假作业1
    谁是你的潜在朋友
    A1095 Cars on Campus (30)(30 分)
    A1083 List Grades (25)(25 分)
    A1075 PAT Judge (25)(25 分)
    A1012 The Best Rank (25)(25 分)
    1009 说反话 (20)(20 分)
    A1055 The World's Richest(25 分)
    A1025 PAT Ranking (25)(25 分)
  • 原文地址:https://www.cnblogs.com/ziqian9206/p/7123225.html
Copyright © 2011-2022 走看看