TagCSRF

Как подделать запрос с использованием CSRF токена для Instagram

Если вы увлекаетесь разработкой для Android и когда-то вам пришла в голову идея написать свое приложения для Instagram, то вы наверняка сталкивались с тем, что API, которое эта социальная сеть предоставляет своим разработчикам, отличается крайне скупыми ресурсами, и используя их сложно сделать приложение, от которого вообще возможна хоть какая-то польза. Получаемая информация от сервиса в основном крутится вокруг аккаунта, под которым произошла авторизация — последние посты, список тех, кто лайкнул пост, информация об отношениях между пользователями и проч., но никаких полезных действий — лайков, поисков по тегам и проч. произвести не получится.

С одной стороны, все логично и может быть легко объяснено. Это просто способ защиты соцсети от массовых накруток аккаунтов, от автоматизации процессов постинга и проч. Принимая это во внимание, можно предположить, что Instagram позиционирует себя как социальная сеть, все виды взаимодействия с которой могут быть произведены только вручную. К сожалению, это ограничивает многих, ведь помимо «незаконных» действий с инстаграмом можно было бы разрабатывать альтернативные клиенты для этой соцсети, ведь давно уже не секрет, что официальный (и единственный) клиент обладает рядом дико раздражающих минусов (плохо реализованный Material Design, например, или отсутствие ландшафтной ориентации на Android, или полное отсутствие версии для iPad и проч.).

Но, оставим позади все эти причины и поговорим о том, как эти ограничения можно обойти.

Continue reading

Laravel: CSRF токен и REST (JWT)

Всем привет!

Вчера мне пришлось немного поломать голову над тем, как совместить использование CSRF и JWT с минимальными изменениями в рабочем коде. Как известно, использование CSRF токена в Laravel настроено по умолчанию, и при POST запросах ajax используется следующая схема.

Сам токен записывается в meta тег csrf-token, верно? Это стандартно в Laravel, упоминания об этом можно найти сразу же в разделе Routing в документации. Однако все хорошо до поры до времени — эта схема нерабочая, если ваша система должна поддерживать Rest интерфейсы, например, для доступа с мобильного приложения.

В Packagist  есть очень хорошая библиотека для работы с токенами с помощью JWT Auth. Подробно узнать что такое JSON Web Token можно здесь, попробую описать кратко, буквально в пару слов что это за зверь и как мы его можем использовать.

JWT это открытый стандарт обмена данными между ресурсами в качестве JSON объекта. Эта информация считается проверенной и ей можно доверять. Указанная выше библиотека берет на себя всю логику обработки, проверки и подтверждения полученных запросов, в настройках можно указать время жизни токена, а уже в готовых Middleware процедуры проверки подлинности и обновления токена, если он истек.

Continue reading