xss攻击解析

XSS攻击(Cross site Scripting),跨站脚本攻击,通过插入恶意脚本并在用户浏览页面时主动或者被动触发的一种攻击方式;

XSS一般分为反射型和存储型;


反射型

反射型XSS攻击是为形象描述它的路径而产生的名称,指的是恶意脚本以查询字符串的形式在用户发出请求时的URL中,提交给服务器后服务器会进行相应的解析,然后将带有XSS代码的响应返回给浏览器,浏览器会解析响应中的XSS并执行;这个过程中XSS代码从浏览器到服务器端,然后又被“反射”回来;

反射型中又包括主动触发(请求后自动触发)和被动触发(需要用户的特定操作)

正常情况下浏览器会拦截XSS攻击,并给出相应的错误信息:

这里写图片描述

我们可以使用express -e搭建一个服务器,使用ejs模板;然后进行xss攻防演练;

// express服务器搭建
var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
	res.set('X-XSS-Protection', 0);
  res.render('index', { title: 'Express', xss: req.query.xss});
});

// ejs模板
<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
    <%- xss %> 	// '-'表示允许输出HTML
  </body>
</html>

当设置URL为http://localhost:3300/?xss=<img src="" onerror="alert(1)"/>或者http://localhost:3300/?xss=<script>alert(1)</script>会自动进行

当设置URL为http://localhost:3300/?xss="<p onmouseover="alert(1)">hello world</p>"/>http://localhost:3300/?xss=<button onclick="alert('XSS')">点我</button>需要通过用户操作触发;

这里写图片描述

另外,可以借助XSS通过iframe标签进行广告植入等;如设置URL为http://localhost:3300/?xss=<iframe src="http://baidu.com"></iframe>,效果如下:

这里写图片描述


存储型

存储型XSS是一种持久化的攻击手段,代码一般存储在服务器端的数据库,内存等地方,XSS代码往往是由于服务器对于用户输入没有进行充分的过滤而导致了可以造成存储型XSS攻击的脚本被存入到服务器端;一旦脚本被保存在服务端,下次请求就不用携带xss脚本而可以直接从数据库或者缓存中读取;

由于脚本保存在服务端,这种类型的XSS攻击对象广泛,而且可以盗取用于cookie并利用;

比如,在一个未对用户博文进行充分过滤的博客网站存在存储型XSS攻击时,当其他用户访问时均会受到攻击;


XSS防御

主要有三种方式:编码、过滤和校正;

1、编码:对用户输入的数据进行HTML entity编码;比如常见的“<”">"等,具体可以参见http://www.freeformatter.com/html-entities.html
2、过滤:移除用户上传的DOM属性,如onmousemove等;移除用户上传的style节点、script节点、iframe节点;
3、校正:避免直接对HTML entity解码;使用DOM Parse转换,校正不配对的DOM标签(标签闭合);

用户提交信息时,在客户端或者服务端进行反转义后再进行存储;用户请求信息时,进行反转义和DOM Parse进行解析(可以检测标签配对、过滤特定标签或者属性然后再将DOM对象显示),进行XSS攻击的防御;


参考文献

1、慕课网教程“Web安全-XSS”
2、DOM Parser: https://developer.mozilla.org/en-US/docs/Web/API/DOMParser

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Neil-

你们的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值