Я имею http://example.com/index.html
, который из HTML использует JavaScript (XmlHttpRequest) для вызова веб-сервисов в http://example.com/json/?a=...&b=...
Веб-сервис возвращается к index.html
массив JSON информации, которая затем будет отображена на index.html
.
Так как любой может просмотреть исходный код для index.html
и посмотрите, как я называю веб-сервис JSON (http://example.com/json/
), как я препятствую тому, чтобы люди назвали мой веб-сервис JSON непосредственно?
Так как веб-сервис является по существу открытым чтением в мою базу данных, я не хочу, чтобы люди злоупотребили веб-сервисом и запустили выбирающие данные непосредственно из веб-сервиса, запускаю DoS мой сервер, выбирая больше информации, чем они должны и т.д.
ОБНОВЛЕНИЕ:
Нет ли никакой способ ограничить запросы на http://example.com/json/
только прибыть из того же сервера (IP) и URL-запрос http://example.com/index.html
?
Значение, не может http://example.com/json/
обнаружьте, что Запрашивающая сторона ($_SERVER['REQUEST_URI'] == http://example.com/index.html
) и только позвольте это?
Существует множество способов повысить безопасность своей службы. Проверьте это из
Нет простого способа предотвратить это . Если ваш сервис не пользуется большой популярностью и, следовательно, может стать целью атак типа «отказ в обслуживании», я бы не стал беспокоиться.
Одна вещь, которая пришла мне в голову, - это использование одноразовых токенов (действительных для 10 или 100 запросов).
Другой (наивный) подход заключается в проверке наличия заголовка X-Requested-With в запросе, но, конечно, это можно легко подделать. Итак, мой совет: ничего не делайте, если проблема не является реальной .
Еще одна идея: hash calc .Идея состоит в том, чтобы требовать от клиента выполнения довольно дорогостоящих вычислений для каждого запроса, в то время как проверка вычислений на стороне сервера обходится дешево. Для одного запроса накладные расходы очень малы, но, скажем, для 1000 запросов это может занять значительное количество процессорного времени. Я понятия не имею, использовался ли hashcalc для предотвращения DoS-атак веб-сервисов. Несколько лет назад это было предложено в качестве меры защиты от спама, но так и не стало популярным.
Вы не можете должным образом защитить веб-сервис, который можно вызвать из javascript на стороне клиента.
Вы можете попытаться использовать методы защиты через неясность, такие как обфускация javascript, но это не остановит кого-то мотивированного.
Ответ действительно просто, используйте защиту CSRF. http://en.wikipedia.org/wiki/Cross-site_request_forgery
Просто, когда пользователь заходит на ваш сайт (index.php), введите сеанс: CSRF = (RANDOM_HASH)
Запросить запрос JSON, example.com/json.php?hash = $ _ SESSION ['CSRF']
И в json.php проверьте, $ _ GET ['hash']
соответствует $ _ SESSION ['CSRF']
Все просто ... Это серверное решение!