0


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

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

Django网络安全

【Django网络安全】如何正确设置跨域
【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'
标签: django web安全 python

本文转载自: https://blog.csdn.net/qq_15028721/article/details/130552599
版权归原作者 我辈李想 所有, 如有侵权,请联系我们删除。

“【Django网络安全】如何正确设置跨域”的评论:

还没有评论