2013-02-11 2 views
1

Итак, у меня есть главная страница, которая получает данные из ссылки JSON и заполняет раскрывающийся список на основе этих данных. Мой вопрос в том, что в настоящее время любой может получить доступ к URL-адресу, в который json печатается, и я хочу его защитить, чтобы только сервер и страницы, запущенные на сервере, могли получить доступ к выходу JSON.Как защитить json

Я думал о сравнении PHP-серверов, таких как remote_addr и server_addr, но remote_addr - это клиентский IP-адрес, а не сервер.

Что такое хороший способ сделать это?

Благодаря

+3

Вкратце: невозможно. – Jon

+1

Как вы аутентифицируете/авторизуете пользователей в первую очередь? Если есть файл cookie для проверки подлинности, я бы предположил, что cookie также будет включен в запрос AJAX, правильно? На основании этого вы будете проверять. – David

+1

Не раскрывайте свой API вообще. Забудьте об этом с помощью PHP-кода; сохранить порты и маршруты закрытыми на уровне брандмауэра/DNS/инфраструктуры. –

ответ

1

Проблема безопасности вы ссылаетесь известен как JSON hijacking, и в то время как некоторые браузеры теперь включают features to mitigate the risk, он по-прежнему является проблемой в других браузерах.

К счастью, существует довольно простое решение. Чтобы понять это, нам нужно понять, как атака работает в первую очередь.
Невозможно, чтобы сторонний сайт просто запросил ваш JSON-файл через XMLHTTPRequest и проанализировал его обычным способом, поскольку это может быть предотвращено политикой того же происхождения.
Итак, что делает злоумышленник, переопределяет функции объекта setter в JavaScript, чтобы вернуть значения любых новых объектов в свой собственный код, а затем создать новый тег , ссылающийся на ваш файл JSON. Когда JSON загружен, браузер выполнит его, создаст новый объект и вернет значения обработчику установки объекта злоумышленника. Теперь у злоумышленника есть ваши данные.

Чтобы предотвратить это, вам нужно просто разобрать код JSON непосредственно как JavaScript. Вы хотите сделать ошибку, если это будет сделано.
Одним из распространенных способов достижения этого (используемым сайтами, такими как Google и Facebook) является добавление кода в начало файла JSON, который создаст бесконечный цикл, не позволяя парсеру достичь остальной части кода (и бросая Ошибка JavaScript).

Например, JSON ответы Facebook начинаются со строки for(;;);, в то время как Google использовать различные биты кода, как while(1); и throw(1); <don't be evil> (последний просто выдает ошибку непосредственно, а не создавать бесконечный цикл).

Вам также потребуется изменить свой собственный JavaScript-манипулятор JSON, чтобы удалить этот треск перед его разбором. Например, вы могли бы сделать:

function parseJSON(json) { 
    json = json.replace("for(;;);", ""); 
    /* parse your JSON as usual */ 
} 

Это добавляет немного хлама к вашему сценарию и ваш JSON, но эффективен в предотвращении JSON угон.

Смежные вопросы