当前位置:网站首页 > 技术博客 > 正文

xss攻击的防范



百度百科:

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

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

通俗解释:

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

 
  

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

 
  

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

img

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

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

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

窃取网页浏览中的cookie值

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

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

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

劫持流量实现恶意跳转

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

 
  

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

  • 大小写绕过

例如:

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

 
  
  • 利用过滤后返回语句再次构成攻击语句来绕过
  • 并不是只有script标签才可以插入代码

我们利用如下方式:

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

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

 
  

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

 
  

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

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

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

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

 
  

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

http://192.168.1.102/xss/example5.php?name=eval(alert(1))

  • 主动闭合标签实现注入代码
  • 组合各种方式
  • 首先是过滤。对诸如(script、img、a)等标签进行过滤。
  • 其次是编码。像一些常见的符号,如<>在输入的时候要对其进行转换编码,这样做浏览器是不会对该标签进行解释执行的,同时也不影响显示效果。
  • 最后是限制。通过以上的案例我们不难发现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: 数据原样保存, 取出来的时候转义)
    重写JsonDeserializer.deserialize()实现对入参的过滤 (PS: 数据转义后保存)




代码编写流程图:

image

 
  

上面自定义过滤器需要到的StringUtils 工具类

 
  
 
  

Clean 方法

 
  

HTML 过滤器

 
  

注册bean

 
  

文件配置:

 
  

这个时候就可以了,我们就可以进行测试了

转义和反转义工具

 
  

Controller 测试类

 
  

到这里spring boot 结合过滤器实现对Xss 攻击的防范就实现了,Xss 攻击总体来说危害还是挺大,对网站安全有较大风险,容易造成个人,公司等损失。

Xss 是较为平常的攻击,我们对网站,数据安全始终在奋进和优化的路上,确保网络环境安全,干净。

上面的攻击手法大家可不要对其他网站进行尝试哦!保护网络环境,平安你我他。

另外感谢大家的阅读:有任何问题,错误,想法欢迎大家留言评论。

版权声明


相关文章:

  • 码流格式有哪些2025-09-01 18:01:01
  • 小米路由器3c 潘多拉2025-09-01 18:01:01
  • 黑马程序员python课件2025-09-01 18:01:01
  • byte数组转为string2025-09-01 18:01:01
  • js图片懒加载怎么实现2025-09-01 18:01:01
  • 怎么链接远程服务器2025-09-01 18:01:01
  • sql nvarchar22025-09-01 18:01:01
  • 串口调试助手v1.42025-09-01 18:01:01
  • 内存检测工具memtest结果2025-09-01 18:01:01
  • js $.trim2025-09-01 18:01:01