1. 程式人生 > >python 中的 csrf(xsrf: 在 tornado 中) 和 cors

python 中的 csrf(xsrf: 在 tornado 中) 和 cors

csrf 跨站請求偽造

csrf( cross-site request forgery) 屬於一種跨站攻擊, 在 tornado 中被稱為 xsrf
不一定是站內輸入, 被偽造的請求可以使任何來源, 並非一定是站內輸入

產生背景

前後端完全分離;
跨域資源共享;

核心

偽造伺服器, 攻擊正常訪問網站的使用者

解決策略

過濾請求的處理者
1. client 端提交表格是增加隨機數 hash 值(用隱藏標籤的方式提交), 在 server 端進行驗證是否一致, 只有真正的 server 端擁有正確的 hash 值
2. 使用”認證令牌”, 身份認證從 cookies 變為 token
3. 增加驗證碼
4. 增加 http 中的 referer 標識, 來判斷是同域還是跨域, 跨域是否是允許的

cors 跨域資源共享

cors (cross-origin resource sharing) 是 W3C 提出的一個標準, 如今是較為主流的解決跨域資源請求方案. [ IE8+都可以相容 ]

產生背景

為了防止 csrf

»»»瀏覽器引入同源(同domain/ip, 同埠, 同協議)策略(sop)保證訪問安全, 愛能互相獲取資源

»»»前後端不能分離,不能操作 cookies, 不能傳送 ajax等問題

提出伺服器跨域 (使用反向代理 或 cors)

核心思想

通過一系列新增的 http 頭資訊來實現 server 和 client 之間的通訊, 所以, 要支援 cors, server 端要做一些相應的配置

, 這樣, 在保證安全性的同事, 也方便了前端的開發

此時, 瀏覽器會將 cors 請求分為兩類:
- 簡單請求: HEAD GET POST
- 非簡單請求: PUT DELETE OPTIONS
非簡單請求會觸發 cors preflight (預檢請求)

觸發預檢請求也有其他情況:
- 傳輸的資料格式不是 application/x-www-form-urlencoded
- 操作 cookies

# 後端header配置(舉例: tornado中)
    def set_default_headers
(self):
self.set_header("Access-Control-Allow-Origin", self.request.headers.get("Origin", "*")) # 限定請求源 self.set_header("Access-Control-Allow-Headers", "x-requested-with,authorization") # 請求頭 self.set_header("Access-Control-Allow-Methods", "POST,GET") # 限定合法的請求方式 self.set_header("Access-Control-Allow-Credentials", "true") # 證書 self.set_header("Content-type", "application/json") # 限定請求資料格式

相關推薦

python csrf(xsrf: 在 tornado ) cors

csrf 跨站請求偽造 csrf( cross-site request forgery) 屬於一種跨站攻擊, 在 tornado 中被稱為 xsrf 不一定是站內輸入, 被偽造的請求可以使任何來源, 並非一定是站內輸入 產生背景 前後端完全分離;

Python之路66-Django的CookieSession

python目錄一、Cookie二、Session一、Cookie1.獲取Cookie request.COOKIES["key"] request.get_signed_cookie(key, default=RAISE_ERROR, s, max_age=None) # 參數 # default:默認

pycharm查看快速幫助python官方幫助文檔

external img 查看 cnblogs image blog extern 技術分享 視圖 把光標放在要查詢的對象上,打開視圖菜單,quick definition查看對象的定義,quick documentation 快速文檔,這個是jet brains自己對py

python之enumerate函數:獲取列表每個元素的索引

pytho pre highlight blog clas dex color int num 源碼舉例: 1 def enumerate_fn(): 2 ‘‘‘ 3 enumerate函數:獲取每個元素的索引和值 4 :return:打印

Python對象的引用共享引用

col 即使 列表 標簽 同一性 例子 垃圾回收 是否 垃圾 在Python中先創建一個對象,然後再將變量指向所創建的對象。 對於每個對象,都有一個頭部信息,在信息中就標記了這個對象的類型信息。每當一個變量名被賦予了一個新的對象,之前那個對象占用的空間就回被回收(如果此時這

python內置函數的 IO文件系列 openos

python io文件 open os 內置函數 本篇介紹 IO 中的 open 和 os基礎用法。本次用一個遊戲登陸 基礎界面做引子,來介紹。實現存儲的話,方式是很多的。 比如 存到字典 和列表了,可是字典、列表是臨時的,玩網頁遊戲一次還是可以,如果要是一個反復要用到的一個軟件的話,顯

python---session(tornado使用)緩存

AC admin nta cli ssi gen set getitem -s session.py插件 # coding:utf8 # __author: Administrator # date: 2018/3/17 0017 # /usr/bin/env

python之requests模塊的paramsdata的區別

技術分享 bubuko .com param ireader rec 之間 clas data params的時候之間接把參數加到url後面,只在get請求時使用: 1 import requests 2 url=‘https://api.ireaderm.net/a

python的list()函數tuple()函數

nbsp tro trac post span RR ive traceback strong tuple函數:將一個序列作為參數,並把它轉化為元組,如果參數是元組,將會原樣返回: >>> tuple([1,2,3]) (1, 2, 3) >>

Python使用aws的snssqs

github scribe bsp 情況下 分布式 int 方法 test devel 首先,sns = Simple Notification Service,sqs = Simple Queue Service sns與sqs有什麽不同? (ref:https://st

python常用的文件目錄操作(二)

工作目錄 environ win works ID ksh sys remove -s OS模塊 一. 概述 python os模塊提供了非常豐富的方法用來處理文件和目錄 二. 導入:import os 三. 常用方法 1. os.name 輸出字符串表示正在使用的平臺,如

python的print(x, end=)print(x, sep=)

拼接 \n 打印 code 默認打印 輸出 col clas range print(x, end=) for i in range(10): print(i) 輸出結果: 0 1 2 3 4 5 6 7 8 9 for i in range(10):

python的self參數cls參數

ini ls參數 普通 直接 CM 更多 class pytho IV 1. self表示一個類的實例對象本身。如果用了staticmethod就無視這個self了,就將這個方法當成一個普通的函數使用了。 2. cls表是這個類本身。 # 代碼為證 class A

python 操作mysql數據fetchone()fetchall()

python AI 就是 ews 結果 mil 多個 null font fetchone() : 返回單個的元組,也就是一條記錄(row),如果沒有結果 則返回 None fetchall() : 返回多個元組,即返回多個記錄(rows),如果沒有結果 則返回 () 需

Pythonprint函數逗號加號的區別

連接 ror container add col body code auto pan 先看看print中逗號和加號分別打印出來的效果.. 這裏以Python3為例 1 print("hello" + "world") helloworld

Python PEP8 編碼規範 表達式語句的空格

pytho 所有 set input 自己 避免 spam 語句塊 混亂 不能忍受的事情 在下列情況下,避免使用無關的空格: 緊跟在小括號,中括號或者大括號後。 Yes: spam(ham[1], {eggs: 2}) No: spam( ham[ 1 ], { e

python讀寫文件read()、readline()readlines()的用法

open getc 今天 print adl 習慣 ever 當前位置 int python中有三種讀取文件的函數: read() readline() readlines() 然而它們的區別是什麽呢,在平時用到時總會遇到,今天總結一下。 0. 前期工作 首先新建一個文

Python設計模式單例模式的實現及在Tornado的應用

實例 類變量 attribute rap all wrap 線程 ++ 出現 單例模式的實現方式 將類實例綁定到類變量上 class Singleton(object): _instance = None def new(cls, *args): if not isinst

python函數——形參的:*args**kwargs

拆分 默認 int 關鍵字 python valid col 關於 實參 多個實參,放到一個元組裏面,以*開頭,可以傳多個參數;**是形參中按照關鍵字傳值把多余的傳值以字典的方式呈現 *args:(表示的就是將實參中按照位置傳值,多出來的值都給args,且以元祖的方式呈現)

統計輸入任意的字符中英文字母,空格其他字符的個數 python

字符 -s dig digi else strong div dea 是否 這裏用到了三個函數: #判斷是否為數字:str.isdigit()#是否為字母:str.isalpha()#是否為空格:str.isspace() def tongji(str): alp