1. 程式人生 > >flask中CSRF保護機制

flask中CSRF保護機制

如果是傳送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])