【一】跨站请求伪造介绍
【1】引入
- CSRF(Cross-Site Request Forgery)跨站请求伪造是一种常见的网络攻击方式。
- 攻击者通过诱导受害者访问恶意网站或点击恶意链接
- 将恶意请求发送到目标网站上
- 利用受害者在目标网站中已登录的身份来执行某些操作
- 从而达到攻击的目的。
【2】举例
- 假设受害者在一家网银网站上登录账户,然后继续浏览其他网页。
- 同时,攻击者通过电子邮件等方式向受害者发送了一封包含恶意链接的邮件。
- 当受害者点击该链接时,潜在的威胁就会变得非常现实。
- 该链接指向一个由攻击者操纵的网站,该网站上的恶意代码会自动向网银网站发送一个请求,请求转账到攻击者的账户。
- 由于受害者在网银网站中已经登录,所以该请求会被认为是合法的,这样攻击者就可以成功地进行转账操作。
【3】保护措施
# 要保护自己免受CSRF攻击,网站开发者可以采取以下措施:
# 1.使用CSRF令牌
在用户的请求中添加随机生成的令牌,并将该令牌保存在用户会话中。
每次提交请求时都会验证该令牌,以确保请求是合法的。
# 2.启用SameSite属性:
将Cookie的SameSite属性设置为Strict或Lax,以限制跨站请求。
这可以在一定程度上缓解CSRF攻击。
# 3.严格验证请求来源
服务器端可以验证请求的来源是否为预期的网站域名
例如检查HTTP Referer头部。
# 4.使用验证码
在敏感操作(如转账、更改密码等)上使用验证码
增加用户身份验证的防护
【二】钓鱼网站案例
- 在早期的网站很容易出现钓鱼诈骗网站的现象,就是钓鱼页面和真的页面做的一模一样,用户在进行金额转账的时候,就会把钱打到陌生人的账户里
- 如果没有csrf校验,就很容易出现这个现象
- 下面对这个现象做一个演示
【1】钓鱼网站
【三】CSRF校验
【1】介绍
- csrf校验是一种用于防止跨站请求伪造(Cross-Site Request Forgery)攻击的安全措施。
【2】csrf校验策略
- csrf中间件会在用户返回一个具有提交数据功能的页面的时候给这个页面加一个唯一标识
- 当这个页面朝后端发送post请求的时候,我的后端会先校验唯一标识,如果唯一标识不对会直接拒绝访问,如果成功则正常运行
【四】POST请求校验CSRF
【1】form表单校验csrf
## 在form表单内加上 {% csrf_token %}
<form action="" method="post">
{% csrf_token %}
<p>转账对象: <input type="text" name="username"></p>
<p>转账金额: <input type="text" name="money"></p>
<p><input type="submit" value="转账"></p>
</form>
# 在浏览器访问的时候会发现这个csrf变成了一个很长很长的字符串,也就是唯一字符串
【2】Ajax携带CSRF
## 来利用标签查找获取页面上的随机字符串
## 书写的代码较长,不推荐
<script>
$('#btn').on('click', function () {
$.ajax({
url: '',
type: 'post',
data: {'name': 'hqq','csrfmiddlewaretoken':$('[name=csrfmiddlewaretoken]').val()},
success: function (args) {
}
})
})
</script>
## 利用模板语法
## 书写的代码少了一些 但是再写前后端分离的项目的时候无法使用模板语法,局限性太大,不推荐
<script>
$('#btn').on('click', function () {
$.ajax({
url: '',
type: 'post',
data: {'name': 'hqq', 'csrfmiddlewaretoken':{% csrf_token %}},
success: function (args) {
}
})
})
</script>
标签:跨站,请求,网站,校验,Django,CSRF,csrf
From: https://www.cnblogs.com/Hqqqq/p/18095010