Flask restful API如何解决跨站请求问题

如果像下面这样只是在return的response添加header是不行的:

response = make_response(jsonify(response=get_articles(ARTICLES_NAME)))

response.headers[‘Access-Control-Allow-Origin‘] = ‘*‘

response.headers[‘Access-Control-Allow-Methods‘] = ‘POST‘

response.headers[‘Access-Control-Allow-Headers‘] = ‘x-requested-with,content-type‘

return response

原因是因为发送请求前都会有一个OPTIONS请求,OPTIONS是客户端浏览器进行的HTTP跨域预访问,而OPTIONS请求时Flask会自动的返回Response,原生的Response并没有处理跨站请求问题,所以即使在API中的Response添加了header也是不行的。

那么解决办法就是: Customizing the Flask Response Class

class MyResponse(Response):    def __init__(self, response=None, **kwargs):        kwargs[‘headers‘] = ‘‘        headers = kwargs.get(‘headers‘)        # 跨域控制        origin = (‘Access-Control-Allow-Origin‘, ‘*‘)        header = (‘Access-Control-Allow-Headers‘, ‘Content-Type‘)        methods = (‘Access-Control-Allow-Methods‘, ‘HEAD, OPTIONS, GET, POST, DELETE, PUT‘)        if headers:            headers.add(*origin)            headers.add(*header)            headers.add(*methods)        else:            headers = Headers([origin, header, methods])        kwargs[‘headers‘] = headers        return super().__init__(response, **kwargs)需要注意的是这里的header = (‘Access-Control-Allow-Headers‘, ‘Content-Type‘)如果没加这一行,很可能会出现只发送了OPTIONS请求,成功后却没有发送GET/POST等请求
这里的值根据前端请求的header内容的,如果前端的header中还有authorization,那么这里得把authorization也加上header = (‘Access-Control-Allow-Headers‘, ‘Authorization, Content-Type‘)
最后在调用该类

  app = Flask(__name__)

  app.response_class = MyResponse

原文地址:https://www.cnblogs.com/tyrionyang/p/9089661.html

时间: 2024-10-28 15:09:20

Flask restful API如何解决跨站请求问题的相关文章

理解CSRF(跨站请求伪造)

理解CSRF(跨站请求伪造) 原文出处Understanding CSRF 对于Express团队的csrf模块和csurf模块的加密函数的用法我们经常有一些在意. 这些在意是莫须有的,因为他们不了解CSRF token是如何工作的. 下面快速过一遍! 读过后还有疑问?希望告诉我们错误?请开一个issue! 一个CSRF攻击是如何工作的? 在他们的钓鱼站点,攻击者可以通过创建一个AJAX按钮或者表单来针对你的网站创建一个请求: <form action="https://my.site.c

CSRF(跨站请求伪造攻击)漏洞详解

Cross-Site Request Forgery(CSRF),中文一般译作跨站点 请求伪造.经常入选owasp漏洞列表Top10,在当前web漏洞排行中,与XSS和SQL注入并列前三.与前两者相比,CSRF相对来说受到的关注要小很多,但是危害却非常大. 通常情况下,有三种方法被广泛用来防御CSRF攻击:验证token,验证HTTP请求的Referer,还有验证XMLHttpRequests里的自定义header.鉴于种种原因,这三种方法都不是那么完美,各有利弊. 二 CSRF的分类 在跨站请

1205 CSRF跨站请求与django中的auth模块使用

目录 今日内容 昨日回顾 基于配置文件的编程思想 importlib模块 简单代码实现 跨站请求伪造csrf 1. 钓鱼网站 如何实现 模拟该现象的产生 2. 解决问题 解决 {% csrf_token %} 3. ajax如何解决 方式1 方式2 方式3 4. csrf相关的两个装饰器 1. 使用 2. 两个装饰器在CBV上的异同 django里settings源码剖析 django有两个配置文件 django auth模块 1. 是什么 2. 常用方法 2.1 创建用户 create_use

Web安全测试之跨站请求伪造(CSRF)篇

跨站请求伪造(即CSRF)被Web安全界称为诸多漏洞中“沉睡的巨人”,其威胁程度由此“美誉”便可见一斑.本文将简单介绍该漏洞,并详细说明造成这种漏洞的原因所在,以及针对该漏洞的黑盒测试与灰盒子测试具体方法和示例,最后提提了一些防范该攻击的建议,希望本文对读者的安全测试能够有所启发. 一.CSRF概述 我们首先来了解一下什么是跨站请求伪造(CSRF)?跨站请求伪造是一种挟制终端用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法.攻击者只要借助少许的社会工程诡计,例如通过电子邮件或者是聊天

js中ajax如何解决跨域请求

js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操作. 跨域指的协议.域名.端口 有一个不同的情况下都是跨域 例:在本站点请求外站的数据是不允许的 //在本站点请求外站点的资源是不允许的 $(function () { $.ajax({ url: "http://127.0.0.1:14847/Web/jsonp.js", success

防止伪造跨站请求(转)

关联: 征服 Ajax 应用程序的安全威胁 AJAX 跨域请求 - JSONP获取JSON数据 跨站脚本 在媒体的帮助下,跨站脚本(XSS)成为了大家关注的焦点,当然它是绝对应当关注的.XSS 是 web 应用中最常见的安全隐患,许多流行的开放源代码的 PHP 应用程序受到 XSS 隐患的困扰. XSS 攻击发生在下面的情况下: 对于可获得用户信任的特定站点. 用户没有必要用很高的等级信任任何网站,但是浏览器需要.例如,当浏览器在请求中发送 cookie,则意味着信任目标网站.对于不同的网站,用

防止伪造跨站请求

跨站脚本 在媒体的帮助下,跨站脚本(XSS)成为了大家关注的焦点,当然它是绝对应当关注的.XSS 是 web 应用中最常见的安全隐患,许多流行的开放源代码的 PHP 应用程序受到 XSS 隐患的困扰. XSS 攻击发生在下面的情况下: 对于可获得用户信任的特定站点. 用户没有必要用很高的等级信任任何网站,但是浏览器需要.例如,当浏览器在请求中发送 cookie,则意味着信任目标网站.对于不同的网站,用户可能有不同的浏览行为或者不同的安全防范等级. 通常包含显示外部数据的网站. 有高风险的应用包含

CSRF(跨站请求伪造)攻击方式

一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF. 二.CSRF可以做什么? 你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全. 三.CSRF漏洞现状 CSRF这

关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)

我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子,当然这是传说,常见的方式是XSS跨站脚本攻击和csrf跨站请求伪造. 3.可用性,比如我们的网络服务是否可用,常用的攻击方式是dos和ddos,拒绝服务和分布式拒绝服务攻击. 本文主要讲述xss和csrf的攻击,配合实例讲述这2者攻击的危害性以及一些防范的措施,有讲的不对或者不完整的地方欢迎大大们