Не слишком ли это сложно, если я добавлю защиту от преднамеренных правонарушений пользователя (мягко говоря), если вред, который может принести пользователь, не связан с моим кодом?
Для пояснения я представляю простой сервис JSON RESTful, например:
GET /items - to retrieve list of user's items
PUT /items/id - to modify an item
POST /items - to add a new item
Сама служба предназначена не для использования через браузер, а только из сторонних приложений, управляемых пользователем (таких как телефонные приложения, настольные приложения и т. Д.). Кроме того, сама служба должна быть без сохранения состояния (то есть без сеанса).
Аутентификация выполняется с помощью базовой аутентификации по SSL.
Я говорю об одном возможном «вредном» поведении, подобном этому:
Пользователь вводит URL-адрес GET в браузере (без причины, но ...). Браузер запрашивает базовую аутентификацию, обрабатывает ее и сохраняет аутентификацию для текущего сеанса просмотра. Не закрывая браузер, пользователь посещает вредоносный веб-сайт с вредоносным JavaScript- кодом CSRF / XSRF, который отправляет POST в наш сервис.
Приведенный выше сценарий крайне маловероятен, и я знаю, что с точки зрения бизнеса мне не стоит слишком беспокоиться. Но ради улучшения ситуации, думаете ли вы, что если имя пользователя и пароль требуются и для данных JSON POST, это поможет?
Или я должен вообще отказаться от Basic Auth, избавиться от GET и использовать только POST / PUT с информацией об авторизации в них? Поскольку информация, полученная через GET, также может быть конфиденциальной.
С другой стороны, считается ли использование пользовательских заголовков чистой реализацией REST? Я могу отбросить Basic Auth и использовать пользовательские заголовки. Таким образом, можно избежать, по крайней мере, CSRF-атаки из браузера, и приложения, использующие сервис, установят имя пользователя / пароль в пользовательском вереске. Плохо для такого подхода то, что теперь сервис нельзя использовать из браузера.