cookies为什么会有csrf风险,为什么token可以避免

本文解释了CSRF攻击如何利用网站对用户浏览器的信任,通过伪造请求和Cookie的使用,强调了使用Token进行防御的方法,包括不在Cookie中存储Token,以及通过时间戳和盐进行签名以验证请求的真实性和防止伪造。
摘要由CSDN通过智能技术生成

CSRF 利用的是网站对用户网页浏览器的信任。

伪造请求(一般是一个非法链接): 链接伪造了目的性请求参数,因为地址需要同源,所以不会改。

Cookie 是通过浏览器将服务器返回的数据保存在本地的一小块数据(一般小于4kb)。当浏览器发送请求且浏览器存在 Cookie 且同源不跨域时,浏览器会自动在请求头携带上 Cookie 数据。所以浏览器对csrf背锅,即csrf利用的是网站对用户网页浏览器的信任。
如果使用token,因为token可以不放在cookie里面,在发送请求时经过前端程序处理才可以把token放到请求参数中,所以在请求伪造的非法链接时,浏览器会自动让请求携带cookie,但是没经过前端的操作,请求不会携带token,服务器没有验证token,就会拦截不服务。
还可以在请求时 使用 token+核心参数+时间戳+盐 使用sha md5之类的单项加密算法做个签名,验证请求核心参数是否被伪造。

个人理解,欢迎交流。

在Web开发中,CSRF(Cross-Site Request Forgery)是一种攻击方式,攻击者利用用户已经登录了某个网站的身份,去发送一些恶意请求,例如在用户不知情的情况下在其账户下发帖、转账等操作。为了防止这种攻击,Web应用程序通常使用CSRF Token来保护用户身份。CSRF Token是一种随机字符串,用于验证请求来源是否合法。 在获取CSRF Token时,通常需要在后端生成一个Token,并将其发送到前端,前端再将其存储在Cookie中。当用户在前端发起请求时,前端将该Token作为请求参数发送到后端,后端验证Token是否合法。 具体获取方式可能因为不同的框架而有所不同,以下是一些常见的获取CSRF Token的方式: 1. Django框架中,可以在后端使用`csrf_token`模板标签生成Token,并将其渲染到前端页面中: ```html <form method="post"> {% csrf_token %} ... </form> ``` 2. 在前端使用AJAX请求时,可以从Cookie中获取Token并添加到请求头中: ```javascript function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie !== '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = cookies[i].trim(); if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } var csrftoken = getCookie('csrftoken'); $.ajax({ url: '/some/url/', type: 'POST', headers: { 'X-CSRFToken': csrftoken }, data: { ... }, success: function(response) { ... } }); ``` 3. 在Vue.js框架中,可以使用`axios`库发送请求,并在请求头中添加Token: ```javascript import axios from 'axios'; import Cookies from 'js-cookie'; const csrftoken = Cookies.get('csrftoken'); axios.defaults.headers.common['X-CSRFToken'] = csrftoken; axios.post('/some/url/', { ... }).then(response => { ... }); ``` 以上是一些常见的获取CSRF Token的方式,具体实现方式可能因为不同的框架而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值