Проблемы безопасности Ajax и возможные атаки - PullRequest
15 голосов
/ 20 мая 2011

Проект, над которым я работаю, использует вызовы AJAX для каждой ссылки на странице, в частности, вызовы jQuery AJAX, а также каждая отправленная форма, помимо входа в систему, отправляется через AJAX, и есть немного json, и XML, в смеси, мой вопрос, каковы риски безопасности этого? Весь код на стороне сервера - PHP, и все правильно экранировано.

Ответы [ 3 ]

13 голосов
/ 20 мая 2011

В AJAX нет ничего конкретного. Это просто запрос, выполняемый вашим браузером. Это просто общий HTTP-запрос и должен быть защищен как любой другой HTTP-запрос, независимо от его природы XHR.

2 голосов
/ 20 мая 2011

Широко распространено мнение, что нет необходимости использовать токены XSRF для защиты сервисов, которые предоставляют доступ только к данным через GET и которые авторизуют пользователя с помощью файлов cookie.

Это не было правдой. Раньше они имели специфичную для AJAX уязвимость XSSI, когда на выходе был массив JSON.

Рассмотрим службу /getfriends, которая возвращает данные типа [ { "name": "Alice" }, { "name": "Bob" } ].

Атакующая страница может сделать

 <script>
   var stolenData;
   var RealArray = Array;
   Array = function () {
     return stolenData = new RealArray();
   };
 </script>
 <script src="https://naivedomain.com/getfriends" type="text/javascript"></script>

и второй тег <script> загружают JSON через домен с файлами cookie пользователя и из-за причуд в EcmaScript 3 (исправлено в EcmaScript 5.0 и современных интерпретаторах ES 3) страница могла читать украденные данные, потому что синтаксический анализатор JavaScript вызывал переопределенный конструктор Array при синтаксическом анализе [...] в ответе JSON.

Защита этих служб с помощью токенов XSRF в дополнение к обычным подходам на основе файлов cookie позволила решить эту проблему, также как и запрет GET, авторизация через пользовательские заголовки и включение средства анализа. Анализаторы работают, делая ответ недействительным JSON, например, возвращает throw 0; [{ "name": "Alice" }, { "name": "Bob" }], чтобы клиент XHR мог удалить префикс throw 0;, но загрузка клиента через <script> не может.

Наконец, поскольку синтаксический анализатор JavaScript анализирует загруженный скрипт как программу, это затрагивает только службы, которые возвращают массивы JSON. Служба /getfriend, которая вернула { "names": ["Alice", "Bob"] }, не будет уязвимой, поскольку этот контент не является допустимой программой - он анализируется как блок с недопустимой меткой. Но недопустимый JSON, такой как { names: [ "Alice", "Bob" ] }, уязвим, поскольку это допустимая программа.

0 голосов
/ 15 июля 2014

Ajax нарушает правила безопасности в отношении процента экранирования зарезервированных символов в данных POST. Чисто и просто, это позволяет напрямую внедрить враждебный код в схемы SQL, которые могут быть такими вещами, как код PHP для последующего извлечения и выполнения на хосте. До тех пор, пока AJAX не начнет экранировать все зарезервированные символы GET и POST, как это делают обычные браузеры с формами, нельзя доверять без полного сканирования каждого сообщения на наличие враждебных сегментов кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...