前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XSS攻击与防范

XSS攻击与防范

作者头像
木可大大
发布2018-07-25 15:07:30
7280
发布2018-07-25 15:07:30
举报
文章被收录于专栏:木可大大木可大大

XSS定义

XSS攻击,又称为CSS(Cross Site Scripting),由于CSS已经被用作层叠样式表,为了避免这个冲突,我们将Cross缩写成X。XSS攻击的中文名叫做跨站脚本攻击。其中需要注意的是跨站,简单的说,一个网站运行的逻辑都应该来自于本站,也就是说,是我们自己网站的东西才能在网站上运行,那么如果我们的网站中运行了其他网站的东西,此时我们就称为跨站脚本攻击。

XSS攻击根据攻击代码的来源可以分为反射型和存储型。其中,反射型表示攻击代码直接通过url传入,而存储型攻击表示攻击代码会被存储到数据库中,当用户访问该记录时才被读取并显示到页面中。目前,攻击者主要采用存储型攻击方式。

XSS攻击的原理就是利用javascript脚本替换原本应该是数据的内容来达到攻击的效果。譬如:

代码语言:javascript
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
    <input type="text" id="content"/>
    <button onclick="submit()">提交</button>
    <script type="text/javascript">
        function submit() {           
         var content = document.getElementById("content").value;            
         document.write(content);
        }    
     </script>
</body>
</html>

接着在输入框中输入:

代码语言:javascript
复制
<script>alert('game over');</script>

出现弹出框

危害

看到这里,我们可能会想,弹一个框影响不大。但是,攻击者通过script脚本,获取cookie信息,那么攻击者就可以假冒你的身份做事情了。除此之外,攻击者还可以通过脚本劫持前端逻辑实现用户意想不到的页面跳转。

防范措施

对于XSS攻击最好的防范手段是:转义。对于用户提交的数据,在展示前,不管是客户端还是服务端,只要对一个端做了转义,就能避免。

代码语言:javascript
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
    <input type="text" id="content"/>
    <button onclick="submit()">提交</button>
    <script type="text/javascript">
        function escape(c) {            
                return c.replace(/&/g, '&amp;')
                .replace(/</g, '&lt;')
                .replace(/>/g, '&gt;')
                .replace(/"/g, '&quot;');
        }       
       function submit() {          
            var content = escape(document.getElementById("content").value);          
            document.write(content);
        }           
</script>
</body>
</html>
增加Cookie被劫持的难度:HttpOnly

除了转义这个手段之外,我们通常还会给cookie加上HttpOnly,防止被javascript访问到。

代码语言:javascript
复制
Set-Cookie: <name>=<value>[; <Max-Age>=<age>]

[; expires=<date>][; domain=<domain_name>]

[; path=<some_path>][; secure][; HttpOnly]
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木可大大 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 增加Cookie被劫持的难度:HttpOnly
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档