web安全:XSS攻击 和 CSRF攻击

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

一个典型流程:

web安全:XSS攻击 和 CSRF攻击

类型: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

 

 
上一篇:csrf攻击理解 以及防御方法


下一篇:UI自动化测试平台,Django“踩坑”之旅(四):Forbidden (CSRF token missing or incorrect.)