设为首页 加入收藏

TOP

详解Xss 及SpringBoot 防范Xss攻击(附全部代码)(一)
2023-07-25 21:39:27 】 浏览:122
Tags:详解 Xss SpringBoot 防范 攻击 全部代

简述Xss

一,什么是Xss 攻击

百度百科:

? XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是java script,但实际上也可以包括JavaVBScriptActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

目前,XSS是黑客最常用来攻击互联网的技术之一,其对互联网安全的危害性在国际排名第二,它是利用Web站点,把病毒混入文本,意图蒙蔽计算机中信息安全系统的"眼睛",对原网站代码进行攻击,盗取人们的信息

通俗解释:

? 这里举一个简单的例子,就是留言板。我们知道留言板通常的任务就是把用户留言的内容展示出来。正常情况下,用户的留言都是正常的语言文字,留言板显示的内容也就没毛病。然而这个时候如果有人不按套路出牌,在留言内容中丢进去一行

<script>alert(“hey!you are attacked”)</script>

那么留言板界面的网页代码就会变成形如以下:

<html>
    <head>
       <title>留言板</title>
    </head>
<body>
<div id=”board” 
        <script>alert(“hey!you are attacked”)</script>
</div>     
    </body>
</html>

那么这个时候问题就来了,当浏览器解析到用户输入的代码那一行时会发生什么呢?答案很显然,浏览器并不知道这些代码改变了原本程序的意图,会照做弹出一个信息框。就像这样。

img

二,Xss的危害

? 其实归根结底,XSS的攻击方式就是想办法“教唆”用户的浏览器去执行一些这个网页中原本不存在的前端代码。达到对网页的攻击。

? 尽管一个信息框突然弹出来并不怎么友好,但也不至于会造成什么真实伤害啊。的确如此,但要说明的是,这里拿信息框说事仅仅是为了举个例子,真正的黑客攻击在XSS中除非恶作剧,不然是不会在恶意植入代码中写上alert(“say something”)的。

在真正的应用中,XSS攻击可以干的事情还有很多,这里举两个例子。

窃取网页浏览中的cookie值

在网页浏览中我们常常涉及到用户登录,登录完毕之后服务端会返回一个cookie值。这个cookie值相当于一个令牌,拿着这张令牌就等同于证明了你是某个用户。

如果你的cookie值被窃取,那么攻击者很可能能够直接利用你的这张令牌不用密码就登录你的账户。如果想要通过script脚本获得当前页面的cookie值,通常会用到document.cookie。

试想下如果像空间说说中能够写入xss攻击语句,那岂不是看了你说说的人的号你都可以登录(不过某些厂商的cookie有其他验证措施如:Http-Only保证同一cookie不能被滥用)

劫持流量实现恶意跳转

这个很简单,就是在网页中想办法插入一句像这样的语句:

<script>window.location.href="http://www.baidu.com";</script>

那么所访问的网站就会被跳转到百度的首页。

Xss攻击方式

  • 大小写绕过

例如:

这个绕过方式的出现是因为网站仅仅只过滤了标签(Script),而没有考虑标签中的大小写并不影响浏览器的解释所致。具体的方式就像这样:

http://192.168.1.102/xss/example2.php?name=<sCript>alert("hey!")</scRipt>
  • 利用过滤后返回语句再次构成攻击语句来绕过
  • 并不是只有script标签才可以插入代码

我们利用如下方式:

[http://192.168.1.102/xss/example4.php?name=
src='w.123' onerror='alert("hey!")'>

就可以再次愉快的弹窗。原因很简单,我们指定的图片地址根本不存在也就是一定会发生错误,这时候onerror里面的代码自然就得到了执行。

以下列举几个常用的可插入代码的标签。

<a onmousemove=’do something here’> 

当用户鼠标移动时即可运行代码

<div onmouseover=‘do something here’> 

当用户鼠标在这个块上面时即可运行(可以配合weight等参数将div覆盖页面,鼠标不划过都不行)

  • 编码脚本代码绕过关键字过滤

有的时候,服务器往往会对代码中的关键字(如alert)进行过滤,这个时候我们可以尝试将关键字进行编码后再插入,不过直接显示编码是不能被浏览器执行的,我们可以用另一个语句eva l()来实现。eva l()会将编码过的语句解码后再执行,简直太贴心了。

例如alert(1)编码过后就是

\u0061\u006c\u0065\u0072\u0074(1)

所以构建出来的攻击语句如下:

http://192.168.1.102/xss/example5.php?name=eva l(\u0061\u006c\u0065\u0072\u0074(1))

  • 主动闭合标签实现注入代码
  • 组合各种方式

Xss 的防范手段

  • 首先是过滤。对诸如(script、img、a)等标签进行过滤。
  • 其次是编码。像一些常见的符号,如<>在输入的时候要对其进行转换编码,这样做浏览器是不会对该标签进行解释执行的,同时也不影响显示效果。
  • 最后是限制。通过以上的案例我们不难发现xss攻击要能达成往往需要较长的字符串,因此对于一些可以预期的输入可以通过限制长度强制截断来进行防御。

Spring Boot 防 Xss 代码攻击

从上面可以知道,Xss 攻击是对入参或者说输出进行修改,劫持内容达到目的。因此我们需要对整个系统的提交进行过滤和转义。

spring boot 防范 XSS 攻击可以使用过滤器,对内容进行转义,过滤。

这里就采用Spring boot+Filter的方式实现一个Xss的全局过滤器

Spring boot实现一个Xss过滤器, 常用的有两种方式:

第一种

  • 自定义过滤器
  • 重写HttpServletRequestWrapper、重写getHeader()、getParameter()、getParameterValues()、getInputStream()实现对传统“键值对”传参方式的过滤
  • 重写getInputStream()实现对Json方式传参的过滤,也就是@RequestBody参数

第二种

  • 自定义序列化器, 对MappingJackson2HttpMessageConverter 的objectMapper做设置.
    重写JsonSerializer.serialize()实现对出参的过滤 (PS: 数据原样保
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java基础之常用类(String类) 下一篇Spring Boot + MybatisX = 王炸!..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目