博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java Web开发 - 持久型/存储型XSS漏洞
阅读量:6707 次
发布时间:2019-06-25

本文共 1647 字,大约阅读时间需要 5 分钟。

Java Web开发 - 持久型/存储型XSS漏洞

1、什么是XSS漏洞攻击?

  XSS是跨站脚本攻击(Cross Site Scripting)的简称,之所以叫XSS而不是CSS相比大家都能明白了吧,那就是为了跟层叠样式表(Cascading Style Sheets,CSS)区别。

2、XSS漏洞攻击的原理

  恶意攻击者往web页面中插入恶意HTML代码,当用户浏览该web页面时,嵌入到该web页面的恶意HTML代码就会被执行,从而达到恶意攻击用户的特殊目的。

  XSS漏洞又分为两类,一类是持久型/存储型XSS,另一类是反射型XSS;

  1)持久型/存储型XSS:嵌入到web页面的恶意HTML会被存储到应用服务器端,简而言之就是会被存储到数据库,等用户在打开页面时,会继续执行恶意代码,能够持续的攻击用户;

  2)反射型XSS:反射型XSS是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的;

  本次主要说的是持久型/存储型XSS漏洞攻击

3、下面是一个示例

  1)这个页面时个简单的添加页面

  2)保存成功之后,可以去查看下数据库,备注字段中的JavaScript代码已经存储到数据库中了,如下:

  3)在打开用户查询列表的页面(只要页面中包含该用户的备注字段都可以),就会出现如下的信息,代表我们攻击成功了。

  总结:

    到这里,可能有人会问,这个能有什么用啊?试想,如果把上面的“备注”字段的值修改成如下的代码,会有什么结果?

    点击就送百元现金     

   如果是这些恶意代码,那么攻击者就能获取到这个用户的cookie信息,进而以该用户角色登录系统了。

4、我们如何来防止这种XSS攻击呢?我总结了以下几点,大家可以参考下

  1)在页面上添加用户输入长度限制;

  2)在服务端(数据库)添加长度限制;

  3)过滤用户输入的特殊字符串,对其进行转义,如下

    示例字符串"<script>是不是document.getElementById('a').href=''+document.cookie;</script>",下面是转义之后的字符串

      StringEscapeUtils - &lt;script&gt;&#26159;&#19981;&#26159;document.getElementById('a').href=''+document.cookie;&lt;/script&gt;
      HtmlUtils - &lt;script&gt;是不是document.getElementById(&#39;a&#39;).href=&#39;&#39;+document.cookie;&lt;/script&gt;

  4)http相关的设置

   A)cookie.setHttpOnly(true);-保护用户cookie

   B)res.setHeader("X-Frame-Options", "SAMEORIGIN");X-Frame-Options对应的属性值含义

      DENY:这个页面不允许被以frame的方式加载

      SAMEORIGIN:这个页面只允许同源页面加载
      <uri>:这个页面只能被特定的域加载
    C)res.setHeader("X-xss-protection", "1;mode=block");
    D)res.setHeader("X-Content-Type-Options", "nosniff ");阻止浏览器进行content-type 嗅探。告诉浏览器相信此服务器下发的资源的类型,防止类    型嗅探攻击。

  

 

 

 

 

 

 

转载于:https://www.cnblogs.com/edi-kai/p/4939896.html

你可能感兴趣的文章
「镁客早报」我国成功发射第四十二、四十三颗北斗导航卫星;北京中关村集成电路设计院开园运营...
查看>>
Python之每日一练生成激活码
查看>>
渐变画刷示例
查看>>
实时应急通讯的帮手——北斗天地对讲机
查看>>
eclipse 配置Android开发环境
查看>>
django 1.8 官方文档翻译: 1-2-6 编写你的第一个Django应用,第6部分
查看>>
JavaScript 复杂判断的更优雅写法
查看>>
MeasureOverride 和 ArrangeOverride
查看>>
Salesforce如何在人工智能领域“杀出一条血路”?
查看>>
Redisson实现Redis分布式锁的N种姿势
查看>>
kafka-storm 详细
查看>>
WebStorm 2019.1 正式发布,为 JS 和 TS 提供更好的智能感知
查看>>
Docker 常用命令总结
查看>>
使用Python请求http/https时设置失败重试次数
查看>>
系统中信息的表示和处理 --《深入理解计算机系统》第二章读书笔记
查看>>
把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案...
查看>>
创新项目从来都是在负债之下做架构取舍
查看>>
搞懂分布式技术14:Spring Boot使用注解集成Redis缓存
查看>>
分布式系列三: 对象序列化
查看>>
iOS面试题·自整理·One
查看>>