前言
XSS并不像SQL一样相对依赖前置知识,XSS对于0基础来说学习起来相对轻松
因为XSS属于客户端攻击,并且需要用户触发 一般危害定位在中危/低危之间
但是幸运的是XSS相对容易挖掘,对于新手来说比较友好
尤其是近期常见的上传XSS,关于上传XSS以及其他另类XSS会放到另一篇文章中提及
本系列文章仅会提及漏洞及原理本身
本篇文章不会像SQL注入系列一样详细 但是会讲清楚XSS漏洞的原理以及基本利用
因为本身难度不高,所以读者学习起来也不困难,当然就不需要那么详细的说明和讲解了
浅谈前端
网页前端一般由HTML/CSS/JavaScript(JS)组成
注:JS和Java没有任何关系
很多人通常叫它们前端三剑客
- HTML
- 用于编写页面的”结构”和”内容”。
- 可以将它比作”房屋的结构和骨架”。
- CSS
- 用于设置页面的”样式和外观”。
- 可以将它比作”给房屋刷的油漆或装修”。
- JavaScript
- 用于赋予页面”交互和动态效果”。
- 可以将它比作”让房屋里各种电器和设备能动起来的电路/机器”。
这三者相互配合,组成了我们所见的网页前端。
前端标签
“标签”是用来描述网页文档结构的标识。一个典型的 HTML 标签通常是成对出现的,例如
<p>这是一个段落</p>
<p>
是开始标签,</p>
是结束标签。- 在两个标签之间的内容通常被称为元素的“内容”或“文本”。
常见标签
- 结构标签:
<html>
、<head>
、<body>
- 文本语义标签:
<p>
(段落)、<h1> ~ <h6>
(标题)、<span>
(行内容器)、<strong>
(强调/加粗文本)等 - 链接和媒体标签:
<a>
(超链接)、<img>
(图片)、<video>
(视频)等 - 容器标签:
<div>
(块级容器)、<section>
、<nav>
、<article>
等(HTML5语义化标签) - 表单标签:
<form>
、<input>
、<button>
、<select>
等
其实对于标签,虽然这里列举了很多,但是并不需要全部记忆下来,只需要过一遍即可
CSS 对于我们的学习影响不大,所以这里不提及,感兴趣可以自行搜索
JS
JS控制网页的动作
实际上XSS攻击核心就是利用JS
我们最常见的方式是
<script>alert("XSS")</script>
如上代码在浏览器中解析后会产生如下效果
这段代码直接在HTML页面通过<script>
标签执行了JavaScript内置的alert()
函数,达到弹出消息框弹窗的效果
同样 JS可以直接内联在标签中
onclick
作为事件触发器,完全是字面意思,当点击,当用户点击这个按钮则触发弹窗
事件触发器还有很多种,这里不一一列举,后面的文章会详细演示
<button onclick="alert('点击了按钮')">点击我</button>
XSS较为常见的利用方式就包含内联在标签中触发JS
XSS危害
- 未授权获取用户Cookie
- 网页钓鱼
- 网页劫持
- 浏览器授权范围内的任意操作执行
常见浏览器安全策略
目前XSS的危害主要还是来源于Cookie窃取
Cookie
Cookie作为Web应用的基本认证模式,对于安全来说十分重要
HTTP/s协议作为无状态协议,每次访问服务器并不会自动记录或记住客户端上一请求的状态信息,每次新的请求在服务器看来都是独立的、不关联的。
Cookie就属于一种标识符。
经常举的一个例子就是 我们吃自助餐时 服务员并不会记住你 而是看你手中的用餐凭证 如果有合法凭证 则你是合法的顾客反之亦然 Cookie就可以理解为用餐凭证
只要网站存在”用户”概念就不可能不使用Cookie
实际上虽然网站之间的策略有所不同,对于Cookie管理方式/模式未必相同,但是在Cookie的有效周期中,无论谁获得到Cookie都可以对Cookie对应的账户进行登录/操作 这个过程服务器是无法感知的。
浏览器安全策略
浏览器对于XSS的防范也在逐步提高,这是随着时间推进的,我无法列举出全部针对XSS的安全策略
但是这里我会列出一些常见的,经典的防护策略
同源策略
此机制作为浏览器对于XSS的防范对抗最经典的机制,我们拿出来第一个讲解
它规定了只有在协议、域名、端口三者都相同的情况下,脚本才能跨域访问对方的资源或DOM。
听起来十分抽象,实则不难理解
协议相同
如https://baidu.com
存在XSS,如果用户触发,http://baidu.com
的Cookie攻击者无法获取
差异在于http和https不同
域名相同
如https://baidu.com
存在XSS,如果用户触发,https://yun.baidu.com
的Cookie攻击者无法获取
差异在于域名不同
端口相同
如https://baidu.com:443
存在XSS,如果用户触发,https://baidu.com:8080
的Cookie攻击者无法获取
差异在于端口不同
HttpOnly
浏览器在处理 Cookie 时,如果 Cookie 带有HttpOnly
标记,则无法被JavaScript读取,只能由浏览器在 HTTP请求时自动携带。
文章可能存在出入,有任何问题欢迎留言
暂无评论内容