XSS AND CSRF

大家都知道XSS和CSRF是网站中常见的两种攻击形式

XSS
一、概念

XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。

简单讲就是将你的页面中插入一些脚本,脚本中带攻击代码来攻击你的网站

二、常见的形式

xss类型(反射型、持久型、DOM-Based)

1、DOM-Based

不基于后端,DOM-Based 当用户更改了某个标签的属性 或往某个标签中塞入一些内容 (有可能是script标签) document.write

```
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM-Based</title>
</head>
<body>
<input type="text" id="web"><button id="add">添加图片</button>
<div class="box"></div>
</body>
<!--<img src=""><script>alert(document.cookie)</script>"">-->
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script>
    // 改变结构后会造成攻击
    // 攻击内容 xss payload
    $('#add').on('click', function () {
        // $('.box').html(`<img src="xxx" onerror="alert(1)" id="">`)
        $('.box').html(`<img src="${$('#web').val()}">`)
    // 这时候input标签中输入的内容是一段脚本 ‘"><script>alert(document.cookie)<\/script>"’
})
</script>
</html>

```
复制代码
2、反射型

即客户端传给服务器什么,服务器就原封不动的返回来。

1)url中带XSS攻击

例如:我们用express在3000端口下起一个服务,当我们访问welcome的时候如果在当前的url中传入什么内容,页面上就展示什么内容。这时候我将url传入的内容改成一段脚本

http://localhost:3000/welcome?type=<script>alert(1)</script>
复制代码

chrome浏览器上会出现一个报错页面,chrome浏览器自身对于这种攻击性的代码做了拦截处理。内容如下:

该网页无法正常运作 Chrome 在此网页上检测到了异常代码。为保护您的个人信息(例如密码、电话号码和信用卡信息),Chrome 已将该网页拦截。 请尝试访问该网站的首页。 ERR_BLOCKED_BY_XSS_AUDITOR

safari 浏览器会拦截这个请求,并报出XSS提示

The XSS Auditor refused to execute a script in 'http://localhost:3000/welcome?type=<script>alert(1)</script>' because its source code was found within the request. The auditor was enabled because the server did not send an 'X-XSS-Protection' header.

QQ浏览器和火狐浏览器上就会被攻击 弹出alert(1),这时候攻击者就可以做她们想做的事情了,比如获取用户的cookie等。

代码如下:

 const express = require('express');

 const app = express();
 
 app.get('/welcome', function (req, res) {
    res.send(`${req.query.type}`)
 });
 
 app.listen(3000);
复制代码
3、持久型

一个评论的输入框,输入评论内容后提交给服务器,并在页面展示该条评论。 如果这时候提交的是一段脚本的话,在页面显示时会遭到攻击。如果这些评论列表接口的数据是共享的话,那不管是哪个用户访问这个评论页面都会受到攻击,而且是持久的。

三、预防手段

DOM-Based: url 转义输入的内容 encodeURIComponent

$('.box').html(`<img src="${encodeURIComponent($('#web').val())}">`)
复制代码

总的来说预防手段就是编码

CSRF
一、概念

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

简单讲就是冒充或伪造用户身份去做一些事情(比如别人写了一个钓鱼网站,当你访问钓鱼网站的时候,它可以借走你的身份去干你想干的事)

二、常见的形式

用户A -> 访问正规的网站A -> 在网站A中产生cookie -> 在网站A用添加一些图片 文字等吸引用户的东西 来引导用户来访问钓鱼网站B -> 钓鱼网站B中内嵌iframe等 通过iframe镶嵌进来的页面 带着cookie向网站A发起请求 ->网站WebA接收到用户浏览器的请求,WebA无法分辨请求由何处发出,由于浏览器访问时带上用户的Cookie,因此WebA会响应浏览器的请求,如此一来,攻击网站WebB就达到了模拟用户操作的目的。

三、预防手段

防范csrf攻击(验证码、referer、token)

1、验证码

大部分网站添加验证码的主要作用是用来防止并发量的(例如:12306),可以起到一定的防御作用并屏蔽一些问题,但不是最优的解决方案。

2、referer(判断来源)

如果不是当前网站发来的请求,那非常可能是被其他网站攻击了。不靠谱,因为Referer只是一个请求头,可以用node自己发请求来改变它。

3、token

CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。 这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对。

参考网站

不要厌烦熟悉的事物,每天都进步一点;不要畏惧陌生的事物,每天都学习一点;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值