Подделка запросов на межсайтовый запрос часто используется в Интернете в течение нескольких дней. Я столкнулся с этим на своем собственном сайте, развернутом в Google App engine. Я узнал об этом, просмотрев журналы доступа. Есть ли какая-либо библиотека XSRF/CSRF или другое решение, доступное для приложения, которое я могу использовать. И сколько будет загружено на мой сайт?
Есть ли доступное решение для поддержки поддержки xsrf/csrf для механизма приложений Google?
Ответ 1
Я использую этот код, вызванный из функции запроса инициатора basehandler
def init_csrf(self):
"""Issue and handle CSRF token as necessary"""
self.csrf_token = self.request.cookies.get('c')
if not self.csrf_token:
self.csrf_token = str(uuid4())[:8]
self.set_cookie('c', self.csrf_token)
if self.request.method == 'POST' and self.csrf_protect \
and self.csrf_token != self.request.get('_csrf_token'):
raise CsrfException('Missing or invalid CSRF token.')
Я взял его из приложение для приложения холста в Facebook включает код для обработки crsf. Я практически не тестировал его, но включил его в свой проект, так как у меня есть приложение для холста для Facebook, которое работает в FB как iframe. Это делает каждый обработчик запроса переменной экземпляра, которую вы можете установить в false, если он генерирует исключение для обычных случаев.
Я еще не тестировал его полностью, но это тот материал, который у меня есть о токенах CRSF для Google App Engine в python. Если вы хотите подробно узнать подробности, как я узнаю, как использовать его в наши дни, вы можете клонировать мой репозиторий.
Ответ 2
Возможно, вы можете попробовать использовать промежуточное программное обеспечение для защиты Django contrib csrf. Не уверен, что он будет работать из-за коробки в AppEngine, но это стоит того.
Ответ 3
Я сделал декоратор:
def csrf_protected(handler):
def inner(self, *args, **kwargs):
token = self.request.params.get('token')
if token and self.session.get('csrf') == token:
self.session['csrf'] = uuid.uuid1().hex
handler(self, *args, **kwargs)
else:
self.abort(400)
return inner
Имейте токен в шаблоне и сеансе