Cross Site Script,简称Css,因与Cascading Style Sheet 重叠,故改为XSS
XSS分为3种:反射型、存储型、DOM型
反射型:
html 代码如下:
<input type="text" value="<%= getParameter("keyword") %>"> <button>搜索</button> <div> 您搜索的关键词是:<%= getParameter("keyword") %> </div>
当访问如下链接( 问题:用户为什么访问这个页面?攻击者有什么意图? ):
别人给你发送一个短信,短信里带着这个链接,url上拼着要操作的js,当你打开短信链接时,就中招了。如果你登录过这个站点,你的登录信息就可能被窃取,或者攻击者直接用你的cookie信息操作数据。
http://xxx/search?keyword="><script>alert('XSS');</script>
形成了如下的 HTML:
<input type="text" value=""><script>alert('XSS');</script>"> <button>搜索</button> <div> 您搜索的关键词是:"><script>alert('XSS');</script> </div>
存储型:存储型 XSS 会把用户输入的数据 “存储” 在服务器端,当浏览器请求数据时,脚本从服务器上传回并执行。这种 XSS 攻击具有很强的稳定性。
例子:在社区或论坛上写下一篇包含恶意 JavaScript 代码的文章或评论,所有访问该文章或评论的用户,都会在他们的浏览器中执行这段恶意的 JavaScript 代码。
给别人留言,如果不对留言做处理,那么在留言里加脚本,可以进行攻击。
DOM型(疑问:DOM型XSS攻击有什么用?攻击者想干啥?):
DOM 型XSS和反射型XSS、存储型XSS的差别在于DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析,完全是客户端的事情。
<h2>XSS: </h2>
<input type="text" id="input">
<button id="btn">Submit</button>
<div id="div"></div>
<script>
const input = document.getElementById('input');
const btn = document.getElementById('btn');
const div = document.getElementById('div');
let val;
input.addEventListener('change', (e) => {
val = e.target.value;
}, false);
btn.addEventListener('click', () => {
div.innerHTML = `<a href=${val}>testLink</a>`
}, false);
</script>
点击 Submit
按钮后,会在当前页面插入一个链接,其地址为用户的输入内容。如果用户在输入时构造了如下内容:
'' onclick=alert(/xss/)
用户提交之后,页面代码就变成了:
<a href onlick="alert(/xss/)">testLink</a>
此时,用户点击生成的链接,就会执行对应的脚本。
DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。
如何防护XSS:
1. httponly防止截取cookie
2. 输入检查:对于< ,>, / 等字符,进行编码或过滤
3. 检查输出:在变量输出到 HTML 页面时,可以使用编码或转义的方式来防御 XSS 攻击
4. 输入内容长度控制
5. 验证码或者token:防止脚本冒充用户提交危险操作
CSRF(跨站请求伪造):cross site request forgery
一个典型流程:
类型:get类型、post类型、链接类型
如何防护CSRF:
1. 同源检测
在HTTP协议中,每一个异步请求都会携带两个Header,用于标记来源域名:
- Origin Header
- Referer Header
2. CSRF Token:登录的时候,返回一个token,请求的时候,在参数中带着token,后端比较两个token是否一致
3. 双重Cookie验证
4. Samesite Cookie属性
相关文章:
前端安全系列一(XSS、CSRF):https://www.lishuaishuai.com/security/1334.html
web安全之XSS攻击原理及防范:https://www.cnblogs.com/tugenhua0707/p/10909284.html#_labe7