python之csrf簡介的簡單介紹

本文目錄一覽:

python如何把csrftoken寫入cookie

csrftoken這個值一般是作為提交表單的一個隱藏域

input type=”hidden” name=”csrftoken

” value=”xxxxxxxxx”

Python後端工程師面試題目有哪些

一.語言

1.推薦一本看過最好的python書籍?

2.談談python的裝飾器,迭代器,yield?

3.標準庫線程安全的隊列是哪一個?不安全的是哪一個?logging是線程安全的嗎?

4.python適合的場景有哪些?當遇到計算密集型任務怎麼辦?

5.python高並發解決方案?我希望聽到twisted-tornado-gevent,能扯到golang,erlang更好

二.操作系統

可以直接認為是linux,畢竟搞後端的多數是和linux打交道。

1.tcp/udp的區別?tcp粘包是怎麼回事,如何處理?udp有粘包嗎?

2.time_wait是什麼情況?出現過多的close_wait可能是什麼原因?

3.epoll,select的區別?邊緣觸發,水平觸發區別?

三.存儲

存儲可能包含rdbms,nosql以及緩存等,我以mysql,redis舉例

mysql相關

1.談談mysql字符集和排序規則?

2.varchar與char的區別是什麼?大小限制?utf8字符集下varchar最多能存多少個字元

3.primary key和unique的區別?

4.外鍵有什麼用,是否該用外鍵?外鍵一定需要索引嗎?

5.myisam與innodb的區別?innodb的兩階段鎖定協議是什麼情況?

6.索引有什麼用,大致原理是什麼?設計索引有什麼注意點?

redis相關

1.什麼場景用redis,為什麼mysql不適合?

2.談談redis的事務?用事務模擬原子+1操作?原子操作還有其它解決方案嗎?

3.redis內存滿了會怎麼樣?

四.安全

web安全相關

1.sql注入是怎麼產生的,如何防止?

2.xss如何預防?htmlescape後能否避免xss?

3.csrf是什麼?django是如何防範的?

密碼技術

1.什麼是分組加密?加密模式有哪些?ecb和cbc模式有什麼區別?為什麼需要iv向量?

2.簡單說說https的過程?

3.對稱加密與非對稱加密區別?

3.如何生成共享秘鑰? 如何防範中間人攻擊?

五.雜

是否關注新技術啊?golang,rust是否了解?numpy,pandas是啥鳥?

是否緊跟時代潮流?逛不逛微博,刷不刷知乎?

可能你覺得我問的好細,但這好多都是平常經常遇到,並需要解決的,細節更能體現一個人。

如果你覺得小kiss,歡迎投簡歷給我yihaibo@longtugame.com,龍圖遊戲運營支持中心數據分析部招人;覺得有點問題,那還等什麼,趕快來和我交流交流。

更新:討論區挺熱鬧,有人說好簡單,有人說好難,其實我覺得這隻適合面試2~3年工作經驗的後端工程師。真的沒有問

很難的題目,只是可能你平時沒有注意。

在這裡我推薦幾本書吧

python參考手冊,絕對讓你更上一層樓

圖解密碼技術,密碼入門不二之選

mysql技術內幕第五版,有點厚當手冊讀讀,要有耐心,高性能mysql也強烈建議讀讀

effective tcp/ip programming

為什麼評論區有這麼大差異?我想是個人經歷不一樣吧,如果是搞web的對操作系統這塊和密碼技術會偏弱,但如果是系統工程師或是遊戲服務端這塊會明顯偏強。

六.後記

最近我也面試了不少童鞋,我發現能達到要求的真的少之又少,很多hr都說Python是最難招聘的崗位,我想是有道理的,這真的很值得我們去深思?

我想有一部分原因是Python這門語言造成的,會寫Python的人很多,但寫的好的人很少,大部分都把Python當做腳本來寫,缺乏面向對 象,模式的思想。想想Java,大家都習慣了介面,實現分離,設計模式在Java中也喊了很多年,尤其是ssh三大框架一出,用著用著就理所當然的認為就 該這麼做,雖然也有點壞處,但對企業級Java開發無疑是一大進步。

反觀Python,尤其是生成器,協程,元類給Python注入了很大的靈活性,想寫的Pythonic有不小難度,但其實Python高級特性就那麼幾個,幹掉了也就沒有了。

當你覺得Python遇到了瓶頸,不妨停下來好好想想。研究研究設計模式,想想重構,了解領域驅動設計,敏捷開發,再回來讀讀以前寫的代碼,當眼界變高了,代碼也就美了。

當然思想的提高不是一朝一夕,模式,原則會經常讓你糾結,糾結就會思索,思考就走出了自己的路,當然條條大路通羅馬。

資料庫等存儲技術是研發工程師邁不過的坎,對關係資料庫以mysql舉例來說,你必須清楚的知道什麼欄位選擇什麼類型,類型位元組大小,限制條件,這 東西也很容易理解,多想想即可,比如set類型,要支持交並等操作,1個位元組只能存8個類別。數據類型搞定了,下面就是索引了,mysql索引種類?主 鍵,唯一索引,普通索引。索引類別,BTree索引,hash索引。索引的優缺點,mysql的索引查找原理,join原理(大部分都是nested loop),以及一些特殊的情況,比如mysql子查詢慢等。其實到這裡研發工程師就差不多,當然你可以繼續深入下去,比如讀寫分離,集群管理,甚至一些 參數調優。

python學科都學習寫什麼

以下是老男孩教育Python全棧課程內容:階段一:Python開發基礎

Python開發基礎課程內容包括:計算機硬體、操作系統原理、安裝linux操作系統、linux操作系統維護常用命令、Python語言介紹、環境安裝、基本語法、基本數據類型、二進位運算、流程式控制制、字元編碼、文件處理、數據類型、用戶認證、三級菜單程序、購物車程序開發、函數、內置方法、遞歸、迭代器、裝飾器、內置方法、員工信息表開發、模塊的跨目錄導入、常用標準庫學習,b加密\re正則\logging日誌模塊等,軟體開發規範學習,計算器程序、ATM程序開發等。

階段二:Python高級級編編程資料庫開發

Python高級級編編程資料庫開發課程內容包括:面向對象介紹、特性、成員變數、方法、封裝、繼承、多態、類的生成原理、MetaClass、__new__的作用、抽象類、靜態方法、類方法、屬性方法、如何在程序中使用面向對象思想寫程序、選課程序開發、TCP/IP協議介紹、Socket網路套接字模塊學習、簡單遠程命令執行客戶端開發、C\S架構FTP伺服器開發、線程、進程、隊列、IO多路模型、資料庫類型、特性介紹,表欄位類型、表結構構建語句、常用增刪改查語句、索引、存儲過程、視圖、觸發器、事務、分組、聚合、分頁、連接池、基於資料庫的學員管理系統開發等。

階段三:前端開發

前端開發課程內容包括:HTML\CSS\JS學習、DOM操作、JSONP、原生Ajax非同步載入、購物商城開發、Jquery、動畫效果、事件、定時期、輪播圖、跑馬燈、HTML5\CSS3語法學習、bootstrap、抽屜新熱榜開發、流行前端框架介紹、Vue架構剖析、mvvm開發思想、Vue數據綁定與計算屬性、條件渲染類與樣式綁定、表單控制項綁定、事件綁定webpack使用、vue-router使用、vuex單向數據流與應用結構、vuex actions與mutations熱重載、vue單頁面項目實戰開發等。

階段四:WEB框架開發

WEB框架開發課程內容包括:Web框架原理剖析、Web請求生命周期、自行開發簡單的Web框架、MTV\MVC框架介紹、Django框架使用、路由系統、模板引擎、FBV\CBV視圖、Models ORM、FORM、表單驗證、Django session cookie、CSRF驗證、XSS、中間件、分頁、自定義tags、Django Admin、cache系統、信號、message、自定義用戶認證、Memcached、redis緩存學習、RabbitMQ隊列學習、Celery分散式任務隊列學習、Flask框架、Tornado框架、Restful API、BBS+Blog實戰項目開發等。

階段五:爬蟲開發

爬蟲開發課程內容包括:Requests模塊、BeautifulSoup,Selenium模塊、PhantomJS模塊學習、基於requests實現登陸:抽屜、github、知乎、博客園、爬取拉鉤職位信息、開發Web版微信、高性能IO性能相關模塊:asyncio、aiohttp、grequests、Twisted、自定義開發一個非同步非阻塞模塊、驗證碼圖像識別、Scrapy框架以及源碼剖析、框架組件介紹(engine、spider、downloader、scheduler、pipeline)、分散式爬蟲實戰等。

階段六:全棧項目實戰

全棧項目實戰課程內容包括:互聯網企業專業開發流程講解、git、github協作開發工具講解、任務管理系統講解、介面單元測試、敏捷開發與持續集成介紹、django + uwsgi + nginx生產環境部署學習、介面文檔編寫示例、互聯網企業大型項目架構圖深度講解、CRM客戶關係管理系統開發、路飛學城在線教育平台開發等。

階段七:數據分析

數據分析課程內容包括:金融、股票知識入門股票基本概念、常見投資工具介紹、市基本交易規則、A股構成等,K線、平均線、KDJ、MACD等各項技術指標分析,股市操作模擬盤演示量化策略的開發流程,金融量化與Python,numpy、pandas、matplotlib模塊常用功能學習在線量化投資平台:優礦、聚寬、米筐等介紹和使用、常見量化策略學習,如雙均線策略、因子選股策略、因子選股策略、小市值策略、海龜交易法則、均值回歸、策略、動量策略、反轉策略、羊駝交易法則、PEG策略等、開發一個簡單的量化策略平台,實現選股、擇時、倉位管理、止盈止損、回測結果展示等功能。

階段八:人工智慧

人工智慧課程內容包括:機器學習要素、常見流派、自然語言識別、分析原理詞向量模型word2vec、剖析分類、聚類、決策樹、隨機森林、回歸以及神經網路、測試集以及評價標準Python機器學習常用庫scikit-learn、數據預處理、Tensorflow學習、基於Tensorflow的CNN與RNN模型、Caffe兩種常用數據源製作、OpenCV庫詳解、人臉識別技術、車牌自動提取和遮蔽、無人機開發、Keras深度學習、貝葉斯模型、無人駕駛模擬器使用和開發、特斯拉遠程控制API和自動化駕駛開發等。

階段九:自動化運維開發

自動化運維開發課程內容包括:設計符合企業實際需求的CMDB資產管理系統,如安全API介面開發與使用,開發支持windows和linux平台的客戶端,對其它系統開放靈活的api設計與開發IT資產的上線、下線、變更流程等業務流程。IT審計+主機管理系統開發,真實企業系統的用戶行為、管理許可權、批量文件操作、用戶登錄報表等。分散式主機監控系統開發,監控多個服務,多種設備,報警機制,基於http+restful架構開發,實現水平擴展,可輕鬆實現分散式監控等功能。

階段十:高並發語言GO開發高並發語言GO開發課程內容包括:Golang的發展介紹、開發環境搭建、golang和其他語言對比、字元串詳解、條件判斷、循環、使用數組和map數據類型、go程序編譯和Makefile、gofmt工具、godoc文檔生成工具詳解、斐波那契數列、數據和切片、makenew、字元串、go程序調試、slicemap、map排序、常用標準庫使用、文件增刪改查操作、函數和面向對象詳解、並發、並行與goroute、channel詳解goroute同步、channel、超時與定時器reover捕獲異常、Go高並發模型、Lazy生成器、並發數控制、高並發web伺服器的開發等。

Python Post遇到csrftoken問題

我上次在用django的時候遇到過這個問題,資料如下:

django對POST請求需要csrf_token驗證,後端會檢測前端發過來的token,如果有問題可以會出現403Forbidden的錯誤。

這個token是由後端在頁面GET請求頁面文件的時候就放進去的,可以在模板中使用{% csrf_token %},例如表單的POST請求就可以這個做,會生成一個隱藏的表單域,帶有後端響應頁面時塞進來的隨機生成的token值。而ajax的請求可以在HTTP header里把這個值放進去,後端需要響應並返回頁面文件時塞進cookie,以便前端可以拿到這個值然後放到Header里再進行POST請求。

對於POST請求,要想前端有token數據,需要幾個修飾方法decorator method

from django.views.decorators.csrf import csrf_protect

from django.views.decorators.csrf import requires_csrf_token

from django.views.decorators.csrf import ensure_csrf_cookie

這裡使用的是這個,前端可以從cookie里拿到token值

使用的時候在相應的view或者方法上加上

@ensure_csrf_cookie

例如:

from django.views.decorators.csrf import requires_csrf_token

from django.shortcuts import render

@requires_csrf_token

def my_view(request):

c = {}

c.update(csrf(request))

return HttpResponse(“value”, c)

而要使POST不會檢測token可以使用

@csrf_exempt

對於ajax ,前端需要獲取token

Javascipt

function getCookie(name) {

var cookieValue = null;

if (document.cookie document.cookie != ”) {

var cookies = document.cookie.split(‘;’);

for (var i = 0; i cookies.length; i++) {

var cookie = cookies[i].trim();

// Does this cookie string begin with the name we want?

if (cookie.substring(0, name.length + 1) == (name + ‘=’)) {

cookieValue = decodeURIComponent(cookie.substring(name.length + 1));

break;

}

}

}

return cookieValue;

}

function loaddata()

{

var csrftoken = getCookie(‘csrftoken’);

var xmlhttp;

if (window.XMLHttpRequest)

{// code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp=new XMLHttpRequest();

}

else

{// code for IE6, IE5

xmlhttp=new ActiveXObject(“Microsoft.XMLHTTP”);

}

xmlhttp.onreadystatechange=function()

{

if (xmlhttp.readyState==4 xmlhttp.status==200)

{

str = xmlhttp.responseText;

alert(str);

}

}

xmlhttp.open(“POST”,”ajax/”,true);

xmlhttp.setRequestHeader(‘X-CSRFToken’,csrftoken)

xmlhttp.send();

}

要先open(),再setRequestheader(),然後再send()

JQuery 來自官方文檔

function csrfSafeMethod(method) {

// these HTTP methods do not require CSRF protection

return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));

}

function sameOrigin(url) {

// test that a given url is a same-origin URL

// url could be relative or scheme relative or absolute

var host = document.location.host; // host + port

var protocol = document.location.protocol;

var sr_origin = ‘//’ + host;

var origin = protocol + sr_origin;

// Allow absolute or scheme relative URLs to same origin

return (url == origin || url.slice(0, origin.length + 1) == origin + ‘/’) ||

(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + ‘/’) ||

// or any other URL that isn’t scheme relative or absolute i.e relative.

!(/^(\/\/|http:|https:).*/.test(url));

}

$.ajaxSetup({

beforeSend: function(xhr, settings) {

if (!csrfSafeMethod(settings.type) sameOrigin(settings.url)) {

// Send the token to same-origin, relative URLs only.

// Send the token only if the method warrants CSRF protection

// Using the CSRFToken value acquired earlier

xhr.setRequestHeader(“X-CSRFToken”, csrftoken);

}

}

});

原創文章,作者:YZEOI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/325424.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YZEOI的頭像YZEOI
上一篇 2025-01-13 13:24
下一篇 2025-01-13 13:24

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29

發表回復

登錄後才能評論