日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Django-跨域問題Csrf

作者:lonely-hermit 更新時間: 2022-05-13 編程語言

防??站受第三?服務器的惡意攻擊,csrf相當于在表達中增加了?個隱藏的input框,?于向服務器提交?個唯一的隨機字符串?于服務器驗證表單是否是本服務器的表單。

在settings中我們設置過這個中間件,默認是開啟的,我們可以注釋掉并不開啟

MIDDLEWARE = [
	'django.middleware.csrf.CsrfViewMiddleware',
]

一、前后端不分離

我們開啟的情況下可以設置一下我們的表單

<form action="" method="post">
    {% csrf_token %}
    <input type="text" name="username">
    <input type="submit">
form>

這樣的話我們的表單會自動提交這個csrf,但是現在已經很少使用submit直接提交了,我們可以使用JS進行提交

<form method="POST" action="/csrf1.html">
    {% csrf_token %}
    <input id="username" type="text" name="username" />
    <input type="submit" value="提交"/>
    <a onclick="submitForm();">Ajax提交a>
form>
<script src="/static/jquery-1.12.4.js">script>
<script>
function submitForm(){
    var csrf = $('input[name="csrfmiddlewaretoken"]').val();
    var user = $('#user').val();
    $.ajax({
        url: '/csrf1.html',
        type: 'POST',
        data: { "user":user,'csrfmiddlewaretoken': csrf},
        success:function(data){
        	console.log('OK');
        }
    })
}
script>

二、跨域問題

?個?站不能使?ajax來訪問另?個?站的數據,這樣的話會被瀏覽器給阻止,這個問題我們通常叫做跨域問題,哪怕是同一域名下的二級域名都不可以

域名的組成 http://www.google.com:80/index.html

http:// 協議

www 子域名

google 主域名

80 端口號

index.html 請求的地址

當協議、?域名、主域名、端?號中任意?個不相同時,都算不同的“域”,不同的域之間相互請求資源,就叫“跨域”。

三、前后端分離

對于前后端分離項目,我們就很難將生成的scrf字符串返回給前端,所以我們需要一個模塊

pip install django-cors-headers

設置

#在INSTALLED_APPS?添加“corsheaders”
INSTALLED_APPS = [
    'corsheaders']

#在MIDDLEWARE_CLASSES添加,這個中間件的位置不要改,否則會出bug
MIDDLEWARE_CLASSES = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
]

# 處理跨域
# 添加允許執行跨站點請求的主機
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
# 授權進行跨站點HTTP請求的來源列表
CORS_ORIGIN_WHITELIST = [
     'http://127.0.0.1',
     'http://localhost',
]
# 允許的方法
CORS_ALLOW_METHODS = [
     'DELETE',
     'GET',
     'OPTIONS',
     'PATCH',
     'POST',
     'PUT',
]
# 發出實際請求時可以使用的非標準HTTP標頭的列表
CORS_ALLOW_HEADERS = (
     'XMLHttpRequest',
     'X_FILENAME',
     'accept-encoding',
     'authorization',
     'content-type',
     'dnt',
     'origin',
     'user-agent',
     'x-csrftoken',
     'x-requested-with',
)

原文鏈接:https://blog.csdn.net/weixin_43903639/article/details/122886598

欄目分類
最近更新