Или если я, например, фильтрую $_GET['callback']
переменная так, чтобы это только содержало допустимое имя функции JavaScript? Если так, что такое допустимые имена функций JavaScript?
Или не фильтрует ту переменную немного точка с JSONP?
Текущее решение: Занесенный в блог о моем текущем решении по http://www.geekality.net/?p=1021. Короче говоря, на данный момент у меня есть следующий код, который, надо надеяться, должен быть довольно безопасным:
Нет, если вы собираетесь ограничить JSONP выбранными доменами. Указывайте также кодировку, иначе люди, которые не должны иметь доступ к JSON, могут совершать инъекционные атаки UTF-7. Вместо этого используйте этот заголовок:
header('Content-Type: application/json; charset=utf-8');
Если предполагается, что это будет публичный JSONP-сервис, то да, это безопасно, а также используйте application/javascript
вместо application/json
.
Думаю, это безопасно. Пока вы не отобразите $ _GET ['callback'] на другой странице без выхода. Тот, кто выполняет запрос, может помещать в него все, что хочет, я думаю, это всегда будут его проблемы, а не ваши. На этой странице представлено определение допустимого имени js-функции: http://www.functionx.com/javascript/Lesson05.htm