2014-02-08 2 views
2

Я сделал несколько мобильных приложений, используя django в качестве моего бэкэнда, и теперь я работаю над расширением chrome. Я хочу, чтобы мои пользователи могли отправлять запросы POST на сервер с помощью приложения/расширения, но есть ли способ сделать это без предварительного запроса сервера на токен CSRF? Он просто сохраняет приложение при выполнении двух запросов каждый раз, когда мы хотим отправить данные. Например, я хочу обновить свой профиль в своем приложении для социальных сетей или обновить кошелек с расширением chrome. Было бы неплохо открыть представление профиля, ввести данные и нажать на сервер. Он менее гладкий, если мне нужно открыть профиль, а затем дождаться его, чтобы захватить маркер с сервера, а затем я могу отправить данные. Есть ли другой способ сделать это? Или я заставляю делать несколько запросов каждый раз, когда я хочу отправлять данные?Защита Django CSRF для мобильных приложений и хромированных расширений

Кроме того, небольшое разъяснение, CSRF запрещает сайтам отправлять формы с данными пользователя. Но что мешает мне создать сайт, который использует ajax или что-то, чтобы захватить реальный сайт и украсть токен CSRF, а затем вставить его в форму запроса на межсайтовый сайт? Я чувствую, что здесь есть лазейка. Я знаю, что я не совсем понимаю это на всем пути.

ответ

4

Вы можете и должны лишить любую конечную точку API CSRF исключить.

Django предлагает декор csrf_exempt именно для этого, см. https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#django.views.decorators.csrf.csrf_exempt.

Также CSRF предназначен для предотвращения непреднамеренных действий, выполняемых с помощью подделок запроса GET. Он не предназначен для того, чтобы автоматическая система не могла подавать формы, для этого есть капли.

Что касается того, что мешает вам использовать AJAX, чтобы захватить весь сайт и извлечь токен, это то, что называется Same-Origin Policy. Это реализовано браузером и не позволяет любому вызову AJAX возвращать данные, когда цель вызова AJAX - это другой домен без правильного набора заголовков. (Я не совсем уверен, что песочница применяется к хромовым расширениям по этому поводу). Таким образом, он будет или, по крайней мере, должен не получить данные через AJAX для обычных веб-сайтов, например. страницу профиля. Если вы хотите взаимодействовать с сторонними веб-сайтами, вы должны изучить, предлагают ли они API.

+0

Так что сделать это csrf_exempt просто делает так, что токен csrf не требуется? Если я использую его для бэкэнд в приложении и не обслуживаю фактические страницы, тогда я мог бы также отключить промежуточное ПО? Сегодня я много читал о csrf (я думал, что понял это раньше, но, видимо, нет). Справедливо ли говорить, что CSRF запрещает людям создавать поддельный сайт, который пытается завладеть вашей пользовательской сессией? –

+1

CSRF может использоваться для атак сеансовой фиксации. Но это также допускает другие атаки. Если вы только создаете и API, вы действительно можете удалить промежуточное ПО CSRF. Вместо этого все запросы должны быть аутентифицированы каким-либо образом. Например. токен или учетные данные. – EWit

Смежные вопросы