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://開頭


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM