導航:首頁 > 編程語言 > pythoncsrftoken

pythoncsrftoken

發布時間:2024-05-01 13:53:13

A. 根據抓來的數據包 怎麼用python 實現圖片上

以下是實現上述思路的方法:

1. 模板文件

<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<formaction="">
{%csrf_token%}
<h3>用戶注冊</h3>
<p>用戶名:<inputtype="text"name="userName"></p>
<p>密碼:<inputtype="password"name="password"></p>
<p>郵箱:<inputtype="text"name="email"></p>
<inputid="avatar"type="text"value="/static/images/sample.png"name="avatar">{#實際應用中要將該input標簽隱藏,display:none;#}
<p><inputtype="submit"value="注冊"></p>
</form>
<div>
<inputid="avatarSlect"type="file">
<imgid="avatarPreview"src="/static/images/sample.png"title="點擊更換圖片">
</div>
</div>
</body>

<scriptsrc="/static/jquery-3.2.1.js"></script>
<script>
$(function(){
bindAvatar();
});
functionbindAvatar(){
if(window.URL.createObjectURL){
bindAvatar3();
}elseif(window.FileReader){
bindAvatar2();
}else{
bindAvatar1();
}
}

/*Ajax上傳至後台並返回圖片的url*/
functionbindAvatar1(){
$("#avatarSlect").change(function(){
varcsrf=$("input[name='csrfmiddlewaretoken']").val();
varformData=newFormData();
formData.append("csrfmiddlewaretoken",csrf);
formData.append('avatar',$("#avatarSlect")[0].files[0]);/*獲取上傳的圖片對象*/
$.ajax({
url:'/upload_avatar/',
type:'POST',
data:formData,
contentType:false,
processData:false,
success:function(args){
console.log(args);/*伺服器端的圖片地址*/
$("#avatarPreview").attr('src','/'+args);/*預覽圖片*/
$("#avatar").val('/'+args);/*將服務端的圖片url賦值給form表單的隱藏input標簽*/
}
})
})
}
/*window.FileReader本地預覽*/
functionbindAvatar2(){
console.log(2);
$("#avatarSlect").change(function(){
varobj=$("#avatarSlect")[0].files[0];
varfr=newFileReader();
fr.onload=function(){
$("#avatarPreview").attr('src',this.result);
console.log(this.result);
$("#avatar").val(this.result);
};
fr.readAsDataURL(obj);
})
}
/*window.URL.createObjectURL本地預覽*/
functionbindAvatar3(){
console.log(3);
$("#avatarSlect").change(function(){
varobj=$("#avatarSlect")[0].files[0];
varwuc=window.URL.createObjectURL(obj);
$("#avatarPreview").attr('src',wuc);
$("#avatar").val(wuc);
{#$("#avatarUrl").load(function(){#}/*當圖片載入後釋放內存空間,但在jQuery3.2.1中會報錯。瀏覽器關閉後也會自動釋放*/
{#window.URL.revokeObjectURL(wuc);#}
{#})#}
})
}

</script>
</html>

2. 視圖函數

upload_avatar.py

fromdjango.shortcutsimportrender,HttpResponse


deftest(request):
returnrender(request,'test.html')


defupload_avatar(request):
file_obj=request.FILES.get('avatar')
file_path=os.path.join('static/images',file_obj.name)
withopen(file_path,'wb')asf:
forchunkinfile_obj.chunks():
f.write(chunk)
returnHttpResponse(file_path)

3. 路由系統

urls.py

fromdjango.conf.urlsimporturl
fromdjango.contribimportadmin


urlpatterns=[
url(r'^admin/',admin.site.urls),
url(r'^upload_avatar/',homeViews.upload_avatar),#上傳頭像
url(r'^test/',homeViews.test),#測試頁面
]

B. "CSRF token missing or incorrect."的解決辦法怎麼解決

1、首先需要安裝pip。

下載get-pip.py文件,網址是:https://bootstrap.pypa.io/get-pip.py。

使用 python get-pip.py 命令自動安裝。

2、然後使用pip安裝需要的東西。

pip install kombupip install celerypip install django-celery

3、最後安裝erlang 和 RabbitMQ。

windows系統直接網路下載,安裝後自動開啟服務。

C. CSRF(跨域請求偽造)

跨站請求攻擊,簡單地說,是攻擊者通過一些技術手段欺騙用戶的瀏覽器去訪問一個自己曾經認證過的網站並執行一些操作(如發郵件,發消息,甚至財產操作如轉賬和購買商品)。由於瀏覽器曾經認證過,所以被訪問的網站會認為是真正的用戶操作而去執行。這利用了web中用戶身份驗證的一個漏洞:簡單的身份驗證只能保證請求發自某個用戶的瀏覽器,卻不能保證請求本身是用戶自願發出的。

你這可以這么理解CSRF攻擊: 攻擊者盜用了你的身份,以你的名義發送惡意請求。 CSRF能夠做的事情包括:以你名義發送郵件,發消息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬……造成的問題包括:個人隱私泄露以及財產安全。

從上圖可以看出,要完成一次CSRF攻擊,受害者必須依次完成兩個步驟:

登錄受信任網站A,並在本地生成Cookie。

在不登出A的情況下,訪問危險網站B。

看到這里,你也許會說:「如果我不滿足以上兩個條件中的一個,我就不會受到CSRF的攻擊」。是的,確實如此,但你不能保證以下情況不會發生:

1.你不能保證你登錄了一個網站後,不再打開一個tab頁面並訪問另外的網站。

2.你不能保證你關閉瀏覽器了後,你本地的Cookie立刻過期,你上次的會話已經結束。

3.上圖中所謂的攻擊網站,可能是一個存在其他漏洞的可信任的經常被人訪問的網站。

1.提交驗證碼

在表單中增加一個隨機的數字或字母驗證碼,通過強制用戶和應用進行交互,來有效地遏制CSRF攻擊。

2.Referer Check(referer:標志請求來源)

檢查如果是非正常頁面過來的請求,則極有可能是CSRF攻擊。

3.token驗證

在 HTTP 請求中以參數的形式加入一個隨機產生的 token,並在伺服器端建立一個攔截器來驗證這個 token,如果請求中沒有

token 或者 token 內容不正確,則認為可能是 CSRF 攻擊而拒絕該請求。

token需要足夠隨機

敏感的操作應該使用POST,而不是GET,以form表單的形式提交,可以避免token泄露。

4. 在 HTTP 頭中自定義屬性並驗證

這種方法也是使用 token 並進行驗證,這里並不是把 token 以參數的形式置於 HTTP 請求之中,而是液春把它放到 HTTP 頭中自定義的屬性里。通過 XMLHttpRequest 這個類,可以一次性給所有該類請求加上 csrftoken 這個 HTTP 頭屬性,並把 token 值蠢埋擾放入其中。這樣解決了上種方法在請求中加入 token 的不便帶旦,同時,通過 XMLHttpRequest 請求的地址不會被記錄到瀏覽器的地址欄,也不用擔心 token 會透過 Referer 泄露到其他網站中去。

csrf過濾器:

referer檢查如果是非正常頁面過來的請求,則極有可能是CSRF攻擊。

自定義請求頭「supporter」,根據電話、郵箱、日期、特殊字元、base64前台加密,後台過濾器解析。

D. 如何用 Python 爬取需要登錄的網站

最近我必須執行一項從一個需要登錄的網站上爬取一些網頁的操作。它沒有我想像中那麼簡單,因此我決定為它寫一個輔助教程。

在本教程中,我們將從我們的bitbucket賬戶中爬取一個項目列表。

教程中的代碼可以從我的 Github 中找到。

我們將會按照以下步驟進行:

提取登錄需要的詳細信息
執行站點登錄
爬取所需要的數據

在本教程中,我使用了以下包(可以在 requirements.txt 中找到):

Python
requests
lxml
1
2

requests
lxml

步驟一:研究該網站
打開登錄頁面

進入以下頁面 「bitbucket.org/account/signin」。你會看到如下圖所示的頁面(執行注銷,以防你已經登錄)

仔細研究那些我們需要提取的詳細信息,以供登錄之用

在這一部分,我們會創建一個字典來保存執行登錄的詳細信息:

1. 右擊 「Username or email」 欄位,選擇「查看元素」。我們將使用 「name」 屬性為 「username」 的輸入框的值。「username」將會是 key 值,我們的用戶名/電子郵箱就是對應的 value 值(在其他的網站上這些 key 值可能是 「email」,「 user_name」,「 login」,等等)。

2. 右擊 「Password」 欄位,選擇「查看元素」。在腳本中我們需要使用 「name」 屬性為 「password」 的輸入框的值。「password」 將是字典的 key 值,我們輸入的密碼將是對應的 value 值(在其他網站key值可能是 「userpassword」,「loginpassword」,「pwd」,等等)。

3. 在源代碼頁面中,查找一個名為 「csrfmiddlewaretoken」 的隱藏輸入標簽。「csrfmiddlewaretoken」 將是 key 值,而對應的 value 值將是這個隱藏的輸入值(在其他網站上這個 value 值可能是一個名為 「csrftoken」,「 authenticationtoken」 的隱藏輸入值)。列如:「」。

最後我們將會得到一個類似這樣的字典:

Python
payload = {
"username": "<USER NAME>",
"password": "<PASSWORD>",
"csrfmiddlewaretoken": "<CSRF_TOKEN>"
}
1
2
3
4
5

payload = {
"username": "<USER NAME>",
"password": "<PASSWORD>",
"csrfmiddlewaretoken": "<CSRF_TOKEN>"
}

請記住,這是這個網站的一個具體案例。雖然這個登錄表單很簡單,但其他網站可能需要我們檢查瀏覽器的請求日誌,並找到登錄步驟中應該使用的相關的 key 值和 value 值。

閱讀全文

與pythoncsrftoken相關的資料

熱點內容
pdf橡皮擦注冊碼 瀏覽:360
櫻校設置id時出現伺服器錯誤該怎麼辦 瀏覽:730
涉及到年份求星期幾的演算法 瀏覽:557
linux防止攻擊 瀏覽:990
已加密的pdf如何刪減頁 瀏覽:794
基於c51單片機 瀏覽:766
編譯的編怎麼寫 瀏覽:615
單片機的冰箱溫度控制的設計 瀏覽:940
蘇東坡全集pdf 瀏覽:799
提升vue編譯速度 瀏覽:490
魚竿裁布尺寸計演算法 瀏覽:70
壓縮機飲水機價格 瀏覽:283
win7linux切換 瀏覽:555
dos命令中提示拒絕訪問 瀏覽:269
js調用java後台方法 瀏覽:311
我的世界命令教程 瀏覽:382
程序員生活中的自律習慣 瀏覽:162
java中編譯與載入 瀏覽:567
正版秒贊源碼官網 瀏覽:104
android雲盤開發 瀏覽:965