場景介紹:
在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://開頭