JSON/JSONP как использовать для (;;); в откосе тела
Я не могу найти способ игнорировать for(;;);
в теле ответа моих междоменных запросов JSONP. Я делаю это на своих серверах, здесь больше ничего не происходит. Я пытаюсь включить это for(;;);
внутри тела ответа моего обратного вызова как такового:
_callbacks_.callback(for(;;);[jsondata....]);
но как я могу удалить его из тела ответа до анализа кода JS? Я использую библиотеку Google Closure кстати.
1 ответ
Ладно, думаю, я понял это. Причина, почему для (;;); Это необходимо для предотвращения междоменных запросов данных определенной информации. Таким образом, в основном, если у вас есть информация, которую вы пытаетесь защитить, вы проходите через обычный канал AJAX JSON, и если вы храните данные на нескольких серверах, вы имеете дело с ними на уровне сервера.
Запросы JSONP на самом деле являются удаленным включением сценария, что означает, что все, что выводит сервер, является фактическим кодом Javascript, так что если у вас есть for(;;);
до вашего _callbacks_.callback();
код будет выполнен в исходном домене при успешном выполнении запроса. Если это бесконечный цикл for, он, очевидно, заклинит страницу.
Итак, нормальный метод реализации следующий:
- Отправьте обычный запрос Ajax в файл, расположенный на том же сервере.
- Выполните работу на уровне сервера и отправляйте запросы на внешние серверы через зашифрованный CURL.
- Добавьте защиту к ответу сервера (
for(;;);
или жеwhile(1);
или жеthrow(1);
с последующим<prevent eval statements>
строка. - Получить ответ в виде текстовой строки.
- Удалите ваши реализации безопасности из строки. Преобразуйте строку (которая теперь является "строкой JSON") в объект / массив JS и т. Д. С помощью стандартного анализатора JSON.
- Делайте все, что вы хотите сделать с данными.
Просто подумал, что я должен выложить это здесь на случай, если кто-то еще будет Google это в будущем, так как я не нашел нужной информации от Google-ing. Это должно помочь предотвратить подделку междоменных запросов.