flask中CSRF保護機制
阿新 • • 發佈:2018-12-15
如果是傳送from表單, 則使用原來的隱藏表單的形式(生成&派發令牌)
<form method="post" action="/">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
</form>
如果是AJAX的POST請求, 則使用meta標籤記錄令牌, 並在ajax的請求頭中設定令牌
<meta name="csrf-token" content="{{ csrf_token() }}"> var csrftoken = $('meta[name=csrf-token]').attr('content') $.ajaxSetup({ beforeSend: function(xhr, settings) { if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) { xhr.setRequestHeader("X-CSRFToken", csrftoken) } } })
開啟CSRF保護 (如果想要使用POSTMAN測試POST請求, 需要註釋CSRF校驗過程)
def protect(self):
if request.method not in current_app.config['WTF_CSRF_METHODS']:
return
try:
# 如果想用postman測試,則註釋下一行程式碼
validate_csrf(self._get_csrf_token())
pass
except validationError as e:
logger.info(e.args[0])
self._error_response( e.args[0])