CSRF-атака с использованием Django

Я работаю над проектом Django, и я могу сделать CSRF-атаку с внешнего URL или файла. Как я могу это заблокировать?

Атака состоит:

  1. Я создаю файл с этим содержанием:
<html>
   <body>
   <script>history.pushState('', '', '/')</script>
   <form action="https://XXXXXX.com/YYYYY/AAAAAA/LLLLLL">
       <input type="submit" value="Submit request" />
    </form>
   </body>
</html>
  1. Я захожу на мою страницу
  2. Я открываю файл в том же браузере
  3. Отправить кнопку

Запрос принят и действие выполнено.

Спасибо за все :)

решаемая

django.middleware.csrf.CsrfViewMiddleware не обеспечивает защиту csrf, если запрос GET

# Assume that anything not defined as 'safe' by RFC7231 needs protection
if request.method not in ('GET', 'HEAD', 'OPTIONS', 'TRACE'):
    if getattr(request, '_dont_enforce_csrf_checks', False):
        # Mechanism to turn off CSRF checks for test suite.
        # It comes after the creation of CSRF cookies, so that
        # everything else continues to work exactly the same
        # (e.g. cookies are sent, etc.), but before any
        # branches that call reject().
        return self._accept(request)

Всего 1 ответ


Измените свой метод публикации и добавьте токен csrf

<html>
   <body>
   <script>history.pushState('', '', '/')</script>
   <form action="https://XXXXXX.com/YYYYY/AAAAAA/LLLLLL" method="post">
      {% csrf_token %}

       <input type="submit" value="Submit request" />
    </form>
   </body>
</html>

и обработать ваш взгляд внутри:

if request.method == 'POST:
     # your logic here

Убедитесь, что «django.middleware.csrf.CsrfViewMiddleware» должен стоять перед любым промежуточным ПО представления, которое предполагает, что атаки CSRF были выполнены.


Есть идеи?

10000