AJAX раскрывает API веб-приложения - PullRequest
1 голос
/ 24 июля 2010

Пару лет назад, до того как я узнал о переполнении стека, я работал в офисе с большой конкуренцией между программистами.Там мне пришлось кодировать веб-страницу на PHP с помощью Drupal, которая должна была получать данные с другого сайта по RSS.Случилось так, что не было никакого способа получить данные заранее: данные зависели от содержимого страницы, которая сама по себе была динамической, поэтому страница перестала загружаться на пару секунд, пока PHP шел для получения данных RSS.Это было плохо.Страница зависит от нескольких параметров из огромного списка.Так что выбор всех возможных комбинаций в davance был вне вопросов.Я думаю, это была какая-то страница поиска, которая включала результаты родственного сайта.

Первое, что я сделал, чтобы улучшить это, было настроить систему кеширования.Когда страница была загружена, он запустил метод Javascript, который сохранил данные RSS обратно в базу данных для этой конкретной страницы, используя AJAX.Это означало, что если та же страница была запрошена снова, старые данные будут отправлены немедленно.и сценарий AJAX обновит кэш новыми данными, если это необходимо.Javascript в значительной степени открыл скрытую страницу на сайте с инструкцией GET, которая соответствовала параметрам текущей страницы.Лишь пару дней спустя я понял, что мог бы кэшировать данные без AJAx.(Поверьте мне, это легче заметить в ретроспективе.) Но это не та проблема, о которой я спрашиваю.

Но мне сказали, чтобы я вообще не делал никакого кэширования.Мне сказали, что моя страница AJAX "выставила API".Злоумышленник может снова и снова зайти на скрытую страницу, чтобы выполнить атаку «Отказ в обслуживании».Я думал, что мой AJAX был временным решением, но такое кэширование было необходимо.Но в основном: разве аргумент DoS не верен для ЛЮБОЙ страницы на сайте? Не ухудшил ли тот факт, что моя скрытая страница не появилась в меню и не вернула никакого контента?

Как я уже сказал, между программистами была большая конкуренция, поэтому люди вокруг меня, которые были единодушны, могли быть правы или пытались помешать мне сделать что-то плохое, потому что это делали не те, кто это делал.,(Это часто случалось.) Но мне все еще интересно.Я полностью осознавал, что мой AJAX был взломом.Я хотел изменить эту систему, как только нашел что-то лучшее, но подумал, что кеширование вообще не было еще хуже.Что было правдой?Разве по этой логике ВСЕ AJAX не предоставляет API?Если мы посмотрим, что мой AJAX был безобразным хаком, действительно ли это было так опасно?

Я снова и снова признаю, что это было некрасивое, временное исправление, но мой вопрос о том, чтобы иметь "скрытая страница, которая не возвращает содержимого, которое заставляет сервер что-то делать.Насколько это ужасно?

Ответы [ 3 ]

1 голос
/ 24 июля 2010

обе стороны правы. Да, он «выставляет» api, но запросы ajax могут получить доступ только к общедоступным документам / скриптам, поэтому да, все запросы ajax «выставляют» свой целевой скрипт одинаково. DoS-атаки не являются специфичными для сценариев, они зависят от сервера, поэтому можно выполнять DoS, используя все, что указывает на сервер, а не только этот сценарий, который вызывает ваш ajax. Я бы сказал вашим друзьям, что их аргументы слабы и цепляются за соломинку, и не ревнуйте: P

0 голосов
/ 24 июля 2010

Если я правильно прочитал ваше сообщение, похоже, что запрашиваемая AJAX версия страницы будет знать, что каждый раз делает кэш недействительным?

Если это так, то я полагаю, что ваш коллега, возможно, говорил, что скрытая страница будет восприимчива к атаке DDOS таким образом, что полная загрузка страницы не была. И.Е. Полная загрузка страницы будет получать кэшированную версию при каждой загрузке страницы после первой, тогда как версия AJAX будет каждый раз получать свежее содержимое. Если это так, то он / она прав.

Под «представлением API» ваш коллега говорил, что вы выставляете URL-адрес страницы, которая выполняет работу, которая должна выполняться в фоновом режиме. Внешний мир не должен знать об URL-адресе, единственной целью которого является выполнение какой-то тяжелой задачи. Как вы даже сказали, вы нашли бэкэнд-решение, которое вообще не требовало от браузера пользователя знания вашего рабочего процесса.

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

0 голосов
/ 24 июля 2010

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

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