CSRF-атака с использованием Django - PullRequest
0 голосов
/ 12 февраля 2020

Я работаю над проектом 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>
Я захожу на мою страницу Я открываю файл в том же браузере Отправляю кнопку

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

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

Решено

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 Ответ

0 голосов
/ 12 февраля 2020

Измените свой метод публикации и добавления токена 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 были выполнены.

...