Django | 从中间件的角度理解跨站请求伪造(Cross-Site Request Forgey)[CSRF攻击]

文章目录

切入点

某些恶意网站上包含链接、表单按钮或者]avaScript,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站上完成某些操作

  • Gjango如何做?

存储暗号:html页面一个 ||| COOKIE 一个

Django在一定的运算下比对两个暗号 是一致的 就不会发生403错

我们通过一个案例来理解

案例测试

确保CSRF中间件功能已经启动

views.py测试代码

python 复制代码
def test_csrf(request):
    if request.method == 'GET':
        return render(request, 'test_csrf.html')
    elif request.method == 'POST':
        return HttpResponse('---test post is ok---')

templates模板下的html文件

  • 注意此时 html没有暗号
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test_csrf</title>
</head>
<body>

    <form action="/test_csrf" method="post">

        <input type="text"  name="username">
        <input type="submit"  value="提交">

    </form>
</body>
</html>

配置路由

path('test_csrf',views.test_csrf),

运行服务 出现CSRF报错

python manage.py runserver

  • 网页查看

    网页报错403,CSRF验证失败,同时给出了我们具体的解决方案

解决CRSF报错

  • html添加暗号
html 复制代码
    <form action="/test_csrf" method="post">
        {% csrf_token %}   
        <input type="text"  name="username">
        <input type="submit"  value="提交">

    </form>

{% csrf_token %}是CRSF能否验证通过 的关键

再次运行服务 查看结果

  • 检查查看cookie
  • 查看html界面源码

    出现暗号 但是隐藏了
    到这里,你应该进一步理解了CSRF攻击的原理了吧
相关推荐
博观而约取9 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
小王子102410 小时前
Django+DRF 实战:从异常捕获到自定义错误信息
后端·django·web开发
ઈ一笑ഒ12 小时前
Django
django
一只程序汪16 小时前
【如何实现分布式压测中间件】
分布式·中间件
William一直在路上17 小时前
主流分布式中间件及其选型
分布式·中间件
互联网搬砖老肖18 小时前
Python 中如何使用 Conda 管理版本和创建 Django 项目
python·django·conda
沛沛老爹11 天前
Python Django全功能框架开发秘籍
python·django·orm·web开发·模板引擎·项目部署·表单处理
listhi52011 天前
深入浅出Node.js中间件机制
中间件·node.js