Предотвращение внедрения данных в формате JSON

Существует разновидность нападений, выражающаяся во внедрении данных в формате JSON, позволяющая сторонним злонамеренным веб-сайтам получить доступ к конфиденциальным ресурсам в формате JSON, если они возвращаются в виде массивов JSON. Это достигается за счет загрузки в веб-страницу данных в формате JSON в виде сценария с последующим его выполнением. Дополнительную информацию по этой теме можно найти по адресу: http://haaeked. com/archive/2008/11/20/anatomv-of-a-subtIe-ison-vulnerabilitv.aspx.

Служба $http имеет встроенную реализацию защиты от нападений этого вида. Чтобы предотвратить выполнение браузером данных в формате JSON, возвращаемых небезопасным ресурсом, можно настроить на сервере добавление ко всем JSON-запросам префикса ")]}', п", который является недопустимым кодом на языке JavaScript и не может быть выполнен. Служба $http автоматически отбрасывает этот префикс, если он присутствует в JSON-ответе. Например, если ресурс возвращает следующий массив:

['а,'Ь','с']

он оказывается уязвим для нападения внедрением JSON. Вместо этого данные должны возвращаться в виде:

['а','Ь','с']

Этот фрагмент является недопустимым кодом на JavaScript. Он не может быть выполнен браузером и поэтому оказывается неуязвимым для описанных выше нападений. Служба $http автоматически отбрасывает недопустимый префикс, если он присутствует, и возвращает допустимые данные в формате JSON в объекте ответа.

Предотвращение подделки межсайтовых запросов

В любом приложении, где сервер оказывает доверие зарегистрированному пользователю и позволяет выполнять некоторые операции на сервере, полагаясь на это доверие, существует вероятность, что другие сайты смогут получить доступ к этим операциям и выполнять их от вашего имени. Эта разновидность нападений называется «подделка межсайтовых запросов» (Cross-Site Request Forgery, XSRF). Если пользователь посетит злонамеренный сайт, когда он уже прошел процедуру аутентификации на защищенном сайте, веб-страница со злонамеренного сайта сможет послать защищенному сайту запрос, поскольку в данный момент вы считаетесь аутентифицированным пользователем.

Такие нападения часто реализуются в виде мошеннического атрибута src в теге , который пользователь может загрузить по неосторожности при переходе на злонамеренную страницу, не закрывая сеанс работы с защищенным сайтом. Когда браузер попытается загрузить изображение, он фактически выполнит запрос к защищенному сайту.

Чтобы устранить эту проблему, сервер может передавать браузеру секретный ключ, доступный только сценарию на JavaScript, выполняющемуся в браузере, и недоступный в атрибуте src. При обращении к серверу этот ключ должен включаться в заголовки запросов, чтобы подтвердить аутентичность пользователя.

Служба $http уже реализует это решение для защиты от нападений подобного рода. Чтобы его активизировать, необходимо на стороне сервера обеспечить передачу в сеансовом блоке cookie параметра с именем xsrf-token, в ответ на первый GET-запрос приложения. Значение этого параметра должно быть уникальным для данного сеанса.

На стороне клиента служба $http будет извлекать этот ключ из cookie и добавлять его в каждый HTTP-запрос в виде заголовка X-xsrf-token. Сервер должен проверять ключ в каждом запросе и блокировать доступ, если он окажется недействительным. Разработчики AngularJS рекомендуют использовать этот ключ в дополнение к cookie аутентификации, чтобы повысить защищенность приложения.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >