XSS攻击与防范

一、XSS概念及原理

XSS  (Cross Site Script),跨站脚本攻击。它是指恶意攻击者往web页面里插入html代码,当用户浏览该页时,
嵌入其中的html代码会被执行,从而达成恶意用户的特殊目的。


二、XSS危害

XSS攻击的危害包括:
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击

三、XSS攻击类型

XSS可以分为两种类型:
     持久型和非持久型
根据数据流向又可以分为三种攻击类型:
     反射型XSS攻击
     存储型XSS攻击
     DOMBasedXSS(基于dom的跨站点脚本攻击)

3.1反射型XSS攻击

反射型数据流向是:浏览器——>后端——>浏览器

下面例子:
一个项目功能:如果登录界面输入错误——>打印输入用户名登录失败
login.jsp
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
</head>
<body>
<form action="/ssmdemo/login/login" method="post">
用户名:<input name="username" type="text">
密码:<input name="password" type="password">
<input type="submit" value="登录">
</form>
</body>
</html>
登录失败页面
fail.jsp
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p id="p">${username }登录失败</p>
</body>
<script type="text/javascript">
var p = document.getElementById("p").innerHTML;
alert(p);
</script>
</html>
开始演示
输入攻击代码<script>alert("你被XSS攻击了!")</script>,点击登录,会弹出我们的攻击弹窗
再弹出我们想要的弹窗
其实你可以不弹窗,只要能把攻击代码写入html里就代表XSS攻击成功了。

3.2存储型XSS攻击

存储型数据流向是:浏览器——>后端——>数据库——>后端——>浏览器

攻击者将代码通过表单提交的方式,将攻击代码写入数据库,当用户浏览页面的时候,数据库里的信息显示在页面,攻击代码执行,
所有浏览到该页面数据的用户都会被XSS攻击,比如我申请一个报销单,报销单选项备注输入攻击代码,攻击代码被写入数据库,当对方审核时看到这条消息,攻击代码被执行,浏览到攻击代码的用户被XSS攻击。

3.3DOMBasedXSS(基于dom的跨站点脚本攻击)

DOM-XSS 的数据流向是:URL-->浏览器 
xss.php

  1. <?php  
  2. error_reporting(0); //禁用错误报告  
  3. $name = $_GET["name"];  
  4. ?>  
  5. <input id="text" type="text" value="<?php echo $name;?>" />  
  6. <div id="print"></div>  
  7. <script type="text/javascript">  
  8. var text = document.getElementById("text");   
  9. var print = document.getElementById("print");  
  10. print.innerHTML = text.value; // 获取 text的值,并且输出在print内。这里是导致xss的主要原因。  
  11. </script>  

能打印这个,不是可以打印cookie?所以不要以为这个攻击没有用了

四、XSS防范

我们经常用<script>alert(1)</script>检测是不是有XSS漏洞,一旦弹出了1就说明有,那么我们该如何防范呢?
1.对用户输入进行检查,检查敏感字符,替换敏感字符
2.后端对输入参数进行过滤,过滤敏感字符,替换敏感字符

ps:不是说这样就安全了,我可以插入的可不只是js,还有其他html标签如<a>,还可以插入属性如onclick="",还可以利用URL的锚#让浏览器不向服务器说明写入请求头Referer字段中,骗过服务器。所以最好的做法其实是
利用token技术。

猜你喜欢

转载自blog.csdn.net/qq_33719636/article/details/80327954
今日推荐