2013-05-28 5 views
1

Как вопрос спрашивает, у меня есть общий сайт, использующий Jetty, и меня спрашивают о защите CSRF.Безопасность: В целом используется Content-Type достаточно для предотвращения CSRF?

Если у меня есть форма:

<form action="http://somedomain.com/somepage"> 
    <input ....> 
</form> 

Мой вопрос: Если somepage принимает только тип содержимого: приложения/JSON, это достаточно, чтобы предотвратить CSRF? Я уверен, что мне нужно создать уникальный токен для каждого пользователя. Однако как кто-то сможет нарушить CSRF, если только защита осуществляется посредством типа контента?

ответ

4

Короткий ответ: возможно

Долгий ответ: не берегите его.

См this question для более полного объяснения, но в то время как содержание проверка типов работает сегодня, вы можете получить довольно близко, разместив действительный JSON как текст/равнина, которая может быть неправильно разобрано некоторых движков.

Кроме того, если enctype='application/json' когда-либо станет действительным HTML, вся ваша система будет исправлена.

Хотя это отличный первый шаг, если вы действительно хотите защитить от атак CSRF, выполните правильную токенную систему CSRF.

+0

Позднее добавление, потому что этот ответ кажется всплывающим с высокой оценкой Google ...: первая часть ответа является допустимым предупреждением, однако предполагается, что «enctype = application/json» использует ограничения одного и того же происхождения, по крайней мере согласно спецификации. –

+0

Да, моя точка зрения была больше, чем полагаться на хорошо управляемых клиентов, а не на хорошо зарекомендовавших себя серверов, что помещает вас в потенциальную уязвимость. –

+0

Несмотря на то, что мы производим поздние дополнения, а также для клиентов с хорошими отзывами, спецификация W3C Beacon обнаружила уязвимость в спецификации, которая довольно долгое время создавала Content-Type. У Chrome была уязвимая реализация - я не уверен в других браузерах. https://github.com/w3c/beacon/issues/16 – mirichan