【Django网络安全】如何正确设置跨域

2023-05-16

原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。

Django网络安全

【Django网络安全】如何正确设置跨域
【Django网络安全】如何正确防护CSRF跨站点请求伪造


文章目录

  • Django网络安全
  • 一、同源策略
  • 二、django解决
    • 1.安装
    • 2.配置INSTALLED_APPS
    • 3.配置MIDDLEWARE中间件
    • 4.django-cors-headers中的参数
    • 5.结合django的csrf配置


一、同源策略

同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源, 即协议不同,域名不同或者端口不同的都是非同源的

浏览器只阻止表单以及 ajax 请求,并不会阻止 src 请求,所以能访问cnd,图片等 src 请求

CORS,Cross-Origin Resource Sharing,是一个新的 W3C 标准,它新增的一组HTTP首部字段,允许服务端其声明哪些源站有权限访问哪些资源。换言之,它允许浏览器向声明了 CORS 的跨域服务器,发出 XMLHttpReuest 请求,从而克服 Ajax 只能同源使用的限制。在我们的django框架中就是利用CORS来解决跨域请求的问题。

二、django解决

建议结合django-cors-headers和django配置,管理跨域相关的内容,比如白名单、子域等。重点是第5步。

1.安装

pip install django-cors-headers

2.配置INSTALLED_APPS

INSTALLED_APPS = (
    ...
    'corsheaders',
    ...
)

3.配置MIDDLEWARE中间件

MIDDLEWARE = [

    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

4.django-cors-headers中的参数

1.配置白名单

CORS_ALLOWED_ORIGINS 是新的参数名,CORS_ORIGIN_WHITELIST 是老的参数名,现在都可以使用,选择一个就行。

# 新
CORS_ALLOWED_ORIGINS = [
    "https://feishu.spacety.com",
    "http://localhost:80",
    "http://127.0.0.1:80",
    "http://192.168.18.156:80",
    "http://192.168.18.161:5173",
]
# 老
CORS_ORIGIN_WHITELIST = (
    'http://127.0.0.1:2020',
    'http://127.0.0.1:1010',
)

2.自定义路径的正则匹配

一个正则表达式,用于限制将为其发送 CORS 标头的 URL。 默认为 r’^.*$',即匹配所有 URL。 当您只需要站点的一部分上的 CORS 时很有用,例如 /api/ 上的 API。

CORS_URLS_REGEX = r"^/api/.*$"

3.允许所有源

CORS_ALLOW_ALL_ORIGINS 为新参数,CORS_ORIGIN_ALLOW_ALL为老参数,选择其中一个就可以默认值为False,如果设置为True,第一步中的白名单将失效。这个参数不建议使用。

CORS_ALLOW_ALL_ORIGINS =True
CORS_ORIGIN_ALLOW_ALL =True

4.设置自定义请求头参数

默认可以使用的非标准请求头,需要使用自定义请求头时,就可以进行修改

CORS_ALLOW_HEADERS = (
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    ‘new’
)

5.允许的 HTTP

默认允许全部的请求方法

CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
)

6.允许跨域请求携带cookie

CORS_ALLOW_CREDENTIALS

CORS_ALLOW_CREDENTIALS = True  # 允许携带cookie

5.结合django的csrf配置

这个参数是django配置setiings的参数,可参考官方文档

1.csrf集成CORS

CORS和CSRF是分开的,Django无法使用你的CORS来。 配置以免除站点的引用检查,以使其在 安全请求。做到这一点的方法是使用其CSRF_TRUSTED_ORIGINS设置。

CORS_ALLOWED_ORIGINS = [
    "http://read.only.com",
    "http://change.allowed.com",
]

CSRF_TRUSTED_ORIGINS = [
    "http://change.allowed.com",
]

2.设置CSRF Cookie时要使用的域

这个将限制请求的来源,默认值为None,不设置。

CSRF_COOKIE_DOMAIN = 'spacety.com'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Django网络安全】如何正确设置跨域 的相关文章

随机推荐

  • 安卓9.0沉浸式状态栏

    首先我们来了解一下几个设置沉浸式状态栏的基础属性 xff1a 1 View SYSTEM UI FLAG LOW PROFILE xff1a 低调模式 会隐藏不重要的状态栏图标 xff1b 2 View SYSTEM UI FLAG HID
  • 安卓Service生命周期

    官方说明图 startService xff1a 开启一个Service且Service生命周期只与自身有关 xff0c 当调用stopService或者stopSelf时停止 如果多次调用startService xff0c 只有第一次会
  • 阿里2014年校园题目最后一题答案及证明

    该题目来自cdsn的一位网友 xff08 可见http blog csdn net thebestdavid article details 11975809 xff09 xff0c 具体内容如下 xff1a 在黑板上写下50个数字 xff
  • 编程——两种list的翻转方法

    对于题目相信大家都比较熟悉了 xff0c 下面就直接上代码了 xff0c 其中没有给出list的creat函数 xff0c 有兴趣的同学可以自己实现 1 模板node的定义 template lt class T gt class TNod
  • 数组旋转新方法

    题目 xff1a 对一个int数组进行左右任意长度的旋转 xff0c 如 xff1a 原始数组为 1 2 3 4 5 xff0c 左旋两位 xff08 可用 2表示 xff09 得 3 4 5 1 2 xff0c 右旋两位 xff08 可用
  • 常见Linux shell脚本中的“-e -d -f -eq -ne -gt -ge”操作符的含义

    常见shell脚本中的 e d f eq ne gt ge 操作符的含义 xff1a 文件表达式 e filename xff1a 如果filename存在 xff0c 则为真 d filename xff1a 如果filename为目录
  • 基于注解的spring源码解析之总体流程

    基于注解的spring源码解析1 总体流程 总体流程图 Demo代码 span class token keyword public span span class token keyword class span span class t
  • Android ViewBinding 替换 findViewById 的神器

    ViewBinding中文官网 ViewBinding 的出现就是为了替代 findViewById 的 以前我们写完布局后就要在代码中使用 findViewById 方法找到 xml 文件中对应的 view xff0c 这样耗时费力 xf
  • 套接字选项(SO_RCVBUF和SO_SNDBUF)

    有时候我们需要控制套接字的行为 如修改缓冲区的大小 这个时候我们就要学习套接字选项 int getsockopt int sockfd int level int optname void optval socklen t optlen i
  • 欢迎使用CSDN-markdown编辑器

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 xff0c 用它写博客 xff0c 将会带来全新的体验哦 xff1a Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传
  • 工作一年,辞职复习半年,考杭电计算机的经验分享

    工作一年 xff0c 辞职复习半年 xff0c 考杭电计算机的经验分享 如果 xff0c 毕业了工作顺利的人大概率是不会去考研的 xff0c 去考研的人 xff0c 大概率是想改变的 题记 2019 4 6 关于我 纠结的人生 为什么考研
  • ICPR-2018-OCR笔记

    2018年第24届国际模式识别大会International Conference on Pattern Recognition ICPR 在北京国家会议中心召开 xff0c 会议从8月20日到24日持续1周时间 有阿里的读光平台的介绍 x
  • centos7 firewalld导致docker网络异常

    centos7 自带防火墙是firewalld 在某下情况下可能导致docker 的某些网络问题 docker 有4种网络模式 xff1a 1 bridge模式 xff08 默认 xff09 xff1a 网桥模式 xff0c 通过虚拟网桥使
  • Linux(centOS)安装yum

    查看是否有安装yum rpm qa grep yum 红框内代表已安装的 xff0c 如果为空代表未安装yum 删除yum下的所有组件 rpm qa grep yum xargs rpm e nodeps 查看原有的yum配置 xff0c
  • Java实现-删除数字

    给出一个字符串 A 表示一个 n 位正整数 删除其中 k 位数字 使得剩余的数字仍然按照原来的顺序排列产生一个新的正整数 找到删除 k 个数字之后的最小正整数 N lt 61 240 k lt 61 N 您在真实的面试中是否遇到过这个题 x
  • CentOS7, CentOS8 firewalld docker 端口映射问题,firewall开放端口后,还是不能访问,解决方案

    启动sqlserver容器 docker run d restart 61 always e 34 ACCEPT EULA 61 Y 34 e 34 SA PASSWORD 61 Abc12345 34 p 1433 1433 name s
  • firewalld 命令大全

    1 firewalld的基本使用 启动 xff1a systemctl start firewalld 查看状态 xff1a systemctl status firewalld 停止 xff1a systemctl disable fir
  • vscode通过文件名查找文件的方法

    vscode通过文件名查找文件的方法 这篇文章给大家分享的是有关vscode通过文件名查找文件的方法的内容 小编觉得挺实用的 xff0c 因此分享给大家做个参考 一起跟随小编过来看看吧 按快捷键ctrl 43 p可以弹出一个小窗 xff0c
  • HTML几种设置水平居中和垂直居中的方式

    水平居中 1 平居中设置 定宽块状元素 当被设置元素为 块状元素 时用 text align xff1a center 就不起作用了 xff0c 这时也分两种情况 xff1a 定宽块状元素和不定宽块状元素 这一小节我们先来讲一讲定宽块状元素
  • 【Django网络安全】如何正确设置跨域

    原文作者 xff1a 我辈李想 版权声明 xff1a 文章原创 xff0c 转载时请务必加上原文超链接 作者信息和本声明 Django网络安全 Django网络安全 如何正确设置跨域 Django网络安全 如何正确防护CSRF跨站点请求伪造