flask 對URL進行安全驗證

2022-06-11 05:21:12 字數 1953 閱讀 4270

雖然我們已經實現了重定向會上乙個頁面的功能,但是安全問題不容忽視,鑑於referer和next容易被串篡改的特性,我們需要對這些值進行驗證,否則會形成開放重定向漏洞
以url中的next引數為例,next變數以字串的形式寫在url裡,因此任何人都可以發給某個使用者乙個包含next變數指向任何站點的連線,那麼就會誤導使用者進入釣魚**。
我們可以驗證next變數指向的url位址是否屬於我們的應用內,否則不允許重定向。
確保url安全的關鍵是判斷url是否屬於程式內部,可以通過判斷url的host、協議等資訊是否和程式內部的url一致,如果一致則認識是可信的url
**中is_safe_url()方法接受目標url作為引數,通過request.host_url獲取程式內部的主機url,然後使用urljoin()函式將目標url轉為絕對url。接著,分別使用urlparse模組提供的urlparse()解析兩個url,最後對目標url的url模式和主機位址進行驗證,確保只屬於程式內部的url才會被返回。
在執行重定向會上乙個頁面的redirect_back()函式中,使用is_safe_url()驗證next和referer的值
fromurlparseimporturlparse, urljoin #python3

需要從urllib.parse匯入

"request.full_path:",request.full_path

return'defis_safe_url(target):

print"request.host_url:",request.host_url

ref_url = urlparse(request.host_url)

print"ref_url:",ref_url

print"target:",target

test_url = urlparse(urljoin(request.host_url, target))

print"test_url:",test_url

print"ref_url.netloc:",ref_url.netloc

print"test_url.netloc:",test_url.netloc

print結果:

控制台輸出:

頁面:

對 Url 進行封裝

如下 var util url url returns geturlfragment function url 假設當前頁面是 那麼有以下情況 d e 1 1 param url url returns getabsoluteurl function url 獲取乙個 url 的基本部分,即不包括 ...

OC 對 URL 進行 URLEncode 編碼

我們在專案中是使用的 asihttprequest 元件來訪問 url 的,在使用 asiformdatarequest 時發出它其中有乙個方法 nsstring encodeurl nsstring string cfstringconvertnsstringencodingtoencoding ...

對URL進行編碼(UTF 8)

最近由於專案需要,寫了乙個函式專門對url裡的中文引數行編碼,網頁那邊是用的utf 8編碼集的,所以在編碼之前必須把字串轉換成utf 8的再進編碼。大家都知道在url位址裡是不可傳中文字元的,因此如果你要url位址裡傳帶有中文字元的引數那就必須對它進行編碼。其實編碼是很簡單的,只是將字串中的每個字元...