一、HTML和JavaScript基础
1. HTML基础
- HTML概述:超文本标记语言,用于实现页面跳转和显示数据。
- 结构标准:包括
<!doctype html>
声明文档类型,<html>
根标签,<head>
头部标签和<body>
主体标签等。 - 标签分类:分为单标签(如
<br/>
、<hr/>
)和双标签(如<a></a>
、<html></html>
)。 - form标签:用于创建HTML表单,包含输入元素、菜单、文本区域等,用于向服务器传输数据。
- iframe标签:允许在同一浏览器窗口中显示多个页面。
2. JavaScript基础
- 概述:一种直译式脚本语言,与Java无关,可动态操作HTML内容、响应事件、读写HTML元素等。
- 引入方式:可通过
<script>
标签直接在HTML中编写,也可引用外部文件。 - 常用函数:包括
alert()
、confirm()
和prompt()
。 - 事件类型:包括鼠标事件、键盘事件和HTML事件,如
onmouseover
、onclick
等。
3. Cookie和Session
- Cookie:保存在客户端的文本文件,用于记录用户信息,分为本地Cookie和临时Cookie。
- Session:存储在服务器的类HashTable结构,用于存放用户数据,通过SessionID标识。
二、XSS漏洞原理
- 定义:XSS(Cross Site Scripting)是指攻击者将恶意脚本植入网页,当用户访问时脚本被执行。
- 攻击流程:
- 攻击者注入JS代码。
- 用户浏览包含恶意代码的页面。
- 浏览器执行恶意代码,达到攻击者目的。
- 危害:包括弹框骚扰、挂马攻击、会话劫持、Cookie盗取、用户提权、账号盗取、DDOS攻击、蠕虫传播等。
三、XSS漏洞分类与利用
1. 反射型(非持续型)
- 原理:恶意脚本附加在URL参数中,前端执行,不存储在后端。
- 攻击步骤:攻击者构造特殊URL,用户访问后,服务端返回拼接后的HTML,浏览器执行恶意代码。
2. 存储型(持续型)
- 原理:恶意代码存储在服务器,当用户浏览相关页面时执行,持久性存储。
- 攻击步骤:攻击者将恶意代码提交到目标网站,用户访问时,服务端从数据库取出并返回给浏览器执行。
3. DOM型
- 原理:XSS代码不需服务端解析,由浏览器端DOM解析触发。
- 攻击步骤:攻击者构造特殊URL,用户访问后,浏览器端直接执行恶意代码。
四、XSS漏洞绕过方法
- 大小写绕过:如
<ScRiPt>alert(1)</ScRiPt>
。 - 双写绕过:如
<sc<script>ript>alert(/xss/)</script>
。 - 反引号绕过:绕过单双引号过滤。
- 关闭标签绕过:利用
<>
关闭标签。 - 超链接标签绕过:如
<a href= >1</a>
。 - 图片链接绕过:如
<img src=1 onerror=alert(1)>
。 - 编码绕过:利用八进制、十进制、十六进制编码、HTML实体编码、URL编码、base64等,以及空格、回车、换行符、tab、混淆等。
五、XSS漏洞防御
- CSP内容安全策略:禁止加载外域代码、外域提交,禁止内联脚本执行和未授权脚本执行。
- 设置HttpOnly:防止Cookie被窃取。
- 输入输出检查:在前端和后端进行,采用白名单或黑名单验证,对输出字符进行HTML编码。