Компьютеры - JSON - Вопросы безопасности02 июня 2011
Оглавление: 1. JSON 2. Синтаксис 3. Сравнение с YAML 4. JSON Schema 5. Вопросы безопасности 6. JSONP & JSONPP 7. Ссылки на объекты
Хотя JSON предназначен для передачи данных в сериализованном виде, его синтаксис соответствует синтаксису JavaScript и это создает ряд проблем безопасности. Зачастую для обработки данных, полученных от внешнего источника в формате JSON, к ним применяется функция eval без какой-либо предварительной проверки.
JavaScript eval
Поскольку JSON представляется синтаксически правильным фрагментом кода JavaScript, простейшим способом разбора JSON-данных в JavaScript-программе является использование встроенной в JavaScript функции eval , которая предназначена для выполнения JavaScript-выражений. При этом подходе отпадает необходимость в использовании дополнительных парсеров.
Техника использования eval делает систему уязвимой, если источник используемых JSON-данных не относится к доверяемым . В качестве таких данных может выступать вредоносный JavaScript код для атак класса Внедрение кода . С помощью данной уязвимости возможно осуществлять кражу данных, подделку аутентификации. Тем не менее, уязвимость можно устранить за счёт использования дополнительных средств проверки данных на корректность. Например, до выполнения eval полученные от внешнего источника данные могут проверяться с помощью регулярных выражений. В RFC, определяющей JSON предлагается использовать следующий код для проверки его соответствия формату JSON
var my_JSON_object = !(/0-9.\-+Eaeflnr-u \n\r\t]/.test(
text.replace*"/g, ''))) &&
eval');
Как более безопасная альтернатива eval была предложена новая функция parseJSON, способная обрабатывать только JSON-данные. Она была представлена в четвёртой версии стандарта ECMAScript и описана в статье «JSON: Обезжиренная альтернатива XML». В настоящее время она доступна как библиотека JavaScript и будет включена в пятую редакцию ECMAScript.
Встроенный JSON
Последние версии веб-браузеров имеют встроенную поддержку JSON и способны его обрабатывать без вызова функции eval , приводящей к описанной проблеме. Обработка JSON в таком случае обычно осуществляется быстрее. Так в июне 2009 года следующие браузеры имели встроенную поддержку JSON:
- Mozilla Firefox 3.5+
- Microsoft Internet Explorer 8
- Opera 10.5+
- Браузеры, основанные на WebKit
По крайней мере, две популярные библиотеки JavaScript используют встроенный JSON в случае его доступности:
Подделка кроссдоменного запроса
Непродуманное использование JSON делает сайты уязвимыми к подделке межсайтовых запросов. Поскольку тэг <script> допускает использование источника, не принадлежащего к тому же домену, что и использующий ресурс, это позволяет выполнять код под видом данных, представленных в формате JSON, в контексте произвольной страницы, что делает возможным компрометацию паролей или другой конфиденциальной информации пользователей, прошедших авторизацию на другом сайте.
Это представляется проблемой только в случае содержания в JSON-данных конфиденциальной информации, которая может быть компрометирована третьей стороной и если сервер рассчитывает на политику одного источника , блокируя доступ к данным при обнаружении внешнего запроса. Это не является проблемой, если сервер определяет допустимость запроса, предоставляя данные только в случае его корректности. HTTP cookie нельзя использовать для определения этого. Исключительное использование HTTP cookie используется подделкой межсайтовых запросов.
Просмотров: 10290
|