XSS、CSRF、CORS简介

一 XSS

二 CSRF

跨站请求伪造(CSRF)是一种冒充受信任用户,向服务器发送非预期请求的攻击方式。

三 CORS

CORS (Cross-Origin Resource Sharing,跨域资源共享)是一个系统,它由一系列传输的HTTP 头组成,这些 HTTP 头决定浏览器是否阻止前端 JavaScript 代码获取跨域请求的响应。

3.1 为什么会出现跨域问题?

同源安全策略 默认阻止“跨域”获取资源。但是 CORS 给了 web 服务器这样的权限,即服务器可以选择,允许跨域请求访问到它们的资源。

浏览器的同源策略: 是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。

同源的定义: 如果两个 URL 的 协议、端口 (如果有指定的话) 和 主机都相同的话,则这两个 URL 是同源。这个方案也被称为“协议/主机/端口元组”,或者直接是“元组”。(“元组”是指一组项目构成的整体,双重/三重/四重/五重/等的通用形式)。

下表给出了与 URL http://store.company.com/dir/page.html 的源进行对比的示例:
XSS、CSRF、CORS简介_第1张图片
请求是跨域的,并不一定会报错。普通的图片请求,css文件请求是不会报错的

跨域请求出现错误的条件: 浏览器同源策略 && 请求是ajax类型

3.2 跨域问题解决方案

在django中:

方式一:在响应对象的响应头中添加一堆键值对,key为Access-Control-Allow-Origin,value为*,这样就是允许所有域名访问。

def get_data(request):
    res = JsonResponse({'name': 'xuxiaoxu', 'age': 18})
    res.headers = {'Access-Control-Allow-Origin': '*'}
    return res

方式二:安装django-cors-headers模块

pip3 install django-cors-headers

注册app

INSTALLED_APPS = [
	...
    'corsheaders'
]

添加中间件,加在第一个。

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
	...
]

settings.py中加一行配置

CORS_ORIGIN_ALLOW_ALL = True

flask中也可以在响应对象的响应头中加上 Access-Control-Allow-Origin = ‘*’

@app.route('/')
def get_data():
    res = jsonify({'name': 'xuxiaoxu', 'age': 18})
    # 解决跨域问题
    res.headers = {'Access-Control-Allow-Origin': '*'}
    return res

你可能感兴趣的:(xss,csrf,django,cors)