django restframework 跨域访问

场景介绍:

在Django开发过程中,使用前后端分离设计的站点越来越多,如Django+VUE、Django+Angular。在使用DjangoRestFramework开发API的过程中,由于前端站点和后端API站点域名往往不同,随之而来的便是跨域问题。
跨域攻击是一种常见的Web攻击手段,常见的攻击流程为: 假设现在你有一个前端站点A和后端站点B,前端站点A使用Ajax的GET请求后端站点B的接口/withdraw/?money=1000&account=yinkh可以向账号yinkh提现一千元,整个过程使用token认证或者session认证,用户的身份信息会被缓存在用户的浏览器中。现在假设有不法分子架设了一个站点C,在站点C中放入一张图片其src路径设置为/withdraw/?money=1000&account=xxxx,不法分子再将站点C的链接通过一定的方式诱导你在缓存有后端站点B的浏览器中访问,如果后端站点B没有做跨域访问控制的话,你就将像不法分子的账户xxxx提现一千元。
而跨域访问控制是通过验证请求来源站点,以防止跨域攻击。只有你将前端站点A对应的域名添加至后端站点B的可信列表中,你才能正确的请求对应的API接口,否则请求将被后端站点B拒绝。

配置:

$ pip install django-cors-headers

  

settings.py

INSTALLED_APPS = [
    ...
    ‘corsheaders‘,
    ...
]
# 设置middleware
MIDDLEWARE = [
    ...
    ‘corsheaders.middleware.CorsMiddleware‘,
    ‘django.middleware.common.CommonMiddleware‘,
    ...
]

# 重点,设置信任站点
if DEBUG:
    CORS_ORIGIN_ALLOW_ALL = True
else:
    CORS_ORIGIN_WHITELIST = (
        ‘www.example.com‘,
    )

  生产环境下需要使用CORS_ORIGIN_WHITELIST,将你信任的前端站点域名加入CORS_ORIGIN_WHITELIST列表中,该域名不要以http://或者https://开头

原文地址:https://www.cnblogs.com/zenan/p/10559469.html

时间: 2024-11-09 00:11:47

django restframework 跨域访问的相关文章

Django解决跨域

Django跨域问题 什么是跨域 ''' 通常情况下,A网页访问B服务器资源时,不满足以下三个条件其一就是跨域访问 1. 协议不同 2. 端口不同 3. 主机不同 ''' Django解决跨域 ''' 安装django-cors-headers模块 在settings.py中配置 # 注册app INSTALLED_APPS = [ ... 'corsheaders' ] # 添加中间件 MIDDLEWARE = [ ... 'corsheaders.middleware.CorsMiddlew

iframe跨域访问

js跨域是个讨论很多的话题.iframe跨域访问也被研究的很透了. 一般分两种情况: 一. 是同主域下面,不同子域之间的跨域: 同主域,不同子域跨域,设置相同的document.domian就可以解决; 父页访问子页,可以document.getElementById("myframe").contentWindow.document来访问iframe页面的内容:如果支持contentDocument也可以直接document.getElementById("myframe&

跨域访问和同源策略

因为在同一个浏览器窗口中能够同时打开多个网站的页面,而且它们都处于同一个会话中,如果不禁止跨域访问则会造成用户隐私数据泄露和登录身份冒用的问题,所以浏览器会使用同源策略限制跨域访问. 在浏览器中,通过JS代码访问不同域名下的URL或者iframe时,会被禁止访问.而不是通过JS代码进行的跨域访问不存在跨域问题!比如跨域加载图片,引用JS文件,下载各种文件,使用iframe跨域嵌入其他网站的页面都是可以的. 跨域访问被禁止有时会给应用开发带来阻碍,但在符合特定条件时也有相应的方法在保证安全的情况下

框架元素-跨域访问-window.name

页面A:页面B,你能传个数据给我吗? 页面B:额,我们不在同一个域内,因为涉及到WEB安全问题,所以浏览器禁止我直接向你传数据. 页面A:有什么办法可以解决这个问题吗? 页面B:可以使用window.name. 页面A:那你需要我做些什么? 页面B:1.你先动态创建一个iframe节点:  2.设置节点属性src指向我:  3.我会设置window.name = 'b':  4.然后你重新设置节点iframe的属性src指向和你在同一个域下的兄弟页面C:  5.虽然属性src的值变了,但是win

前端跨域访问

1. JSONP 2. CORS(Cross-origin resource sharing) 2.1 运行模式 2.2 JQuery支持CORS 2.3 与JSONP相比 3. 跨域访问在点评的应用 References 在互联网应用中: 一个页面需要请求多个域名下的web服务端接口 同时一个web服务接口可能会被很多不同域名下的页面请求. 一个web应用如果支持为了支持以上模式而申请多个域名是不合算的,因为域名申请和管理所占用的资源比较大,因此服务端支持跨域就成了一个更合理的解决方案.解决跨

ajax 设置Access-Control-Allow-Origin实现跨域访问

ajax跨域访问是一个老问题了,解决方法很多,比较常用的是JSONP方法,JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式安全. 即使使用jquery的jsonp方法,type设为POST,也会自动变为GET. 官方问题说明: “script”: Evaluates the response as JavaScript and returns it as plain text. Disables caching by appending a query string

Ajax跨域访问wcf服务中所遇到的问题总结。

工具说明:vs2012,sql server 2008R2 1.首先,通过vs2012建立一个wcf服务项目,建立好之后.再新开一个vs2012 建立web项目,通过jQuery的ajax方法访问服务. 问题:由于web项目和wcf服务,不在同一个端口之中,所以涉及到“跨域”的问题.跨域访问的时候,需要对服务的接口和方法做一定的限定.具体参考:http://www.cnblogs.com/yangbingqi/p/2096197.html 2.解决了跨域问题,我们需要把服务部署到IIS.vs20

JQuery+ajax+jsonp 跨域访问

Jsonp(JSON with Padding)是资料格式 json 的一种“使用模式”,可以让网页从别的网域获取资料. 关于Jsonp更详细的资料请参考http://baike.baidu.com/view/2131174.htm,下面给出例子: 一.客户端 Html代码   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.

JS同源策略和跨域访问

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现. 1. 什么是同源策略 理解跨域首先必须要了解同源策略.同源策略是浏览器上为安全性考虑实施的非常重要的安全策略. 何谓同源: URL由协议.域名.端口和路径组成,如果两个URL的协议.域名和端口相同,则表示他们同源. 同源策略: 浏览器的同源策略,限制了来自不同源的"doc