XSS攻击

XSS攻击主要利用js脚本来实现注入攻击 窃取用户cookie从而达到在用户本人不知情的情况下 进行一些危害性较大的操作

XSS攻击 主要分为3种形态

1、非持久形

    什么是非持久形呢?最通俗易懂的说法就是 每当进行攻击时 要手动进行注入

    例子:

#该文件为form.html 其中包含form表单准备提交至 form.php
<form action="/form.php" method="post">
  <input type="text" value="" name="param">
  <input type="submit">
</form>


#该文件为form.php
<?php 
  $param = $_GET['param'];
  echo "您好,{$param}!";
?>

#映射关系
客户端(浏览器)->服务器端->客户端(浏览器)

····如果我们在param字段中填写正常的字符串 param=张三

    结果则会输出   “您好,张三”;

····但如果非正常字符串 param=<script>window.location.href="https://www.baidu.com"</script>

    结果则不会按照我们的预想一样 正常输出并停留在该页面 当php直接输出直接用户提交的param参数时

    其中的script标签中的内容就会被浏览器解析 从而导致页面被js脚本重定向至百度首页 

    这就是一个最简单的非折射性XSS攻击的示例了

2、持久形

    上面我们说过了非持久形,那么持久形与其刚好相反。不需要每次攻击都进行手动注入,而是通过系统某个注入点进行攻击。将攻击的内容存储在 数据库、内存、缓存之中。最经典的例子就是通过留言板进行注入。

#这是 guestbook.html
<form action="/guestbook.php" method="post">
姓名:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
内容:<input type="text" name="content"><br>
</form>

#这是 guestbook.php
<?php 
  #假设存在 guestbook表
  $name    = $_POST['name'];
  $age     = $_POST['age'];
  $content = $_POST['content'];

  $con=mysqli_connect("localhost","user","password","database"); 
  mysqli_query($con,"INSERT INTO xss(name, age, content) VALUES ($name,$age,$content)");

  #此时 如果用户提交的内容是一些js脚本 我们不加过滤 那么信息就会直接储存到我们的数据库中
  #此时并没有造成影响 一旦该留言 在前端留言页面被读取展示 其中的JS就会被浏览器解析 从而达到 不管是谁访问留言板页面 
  #都会直接执行该JS代码 从而对我们的网站造成影响

#映射关系
客户端(浏览器)->服务器(php数据入库)->数据库(储存)->服务器(php读取数据)->客户端(渲染在浏览器端)
?>

3、DOM形

    DOM形 不需要服务器端参与 仅通过DOM树即可完成

<script>
  #获取URL的锚部分(从 # 号开始的部分) 例如:https://www.baidu.com#abc
  eval(decodeURI(location.hash.substr(1)))

  #js的eval函数具有极大安全隐患 如果我在地址栏输入 https://www.baidu.com#https://www.abc.com/xss.js
  #那么js就会直接读取https://www.abc.com/xss.js的内容 一旦xss.js中包含恶意代码 那么我们的网站就会收到影响

#映射关系
客户端(仅通过客户端 无需服务器端处理)
</script>

 

转载于:https://my.oschina.net/u/4125329/blog/3076054

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值