Новый CSRF на Яндексе

Это не безопасность аякса, это яндексоиды додумались выдавать .js с личными данными в зависимости от кук.
 
Ага, я тоже до этого допер только что.
Я правильно понимаю, что если бы там был XML, то XMLHTTPRequest не запросил бы его с чужого сервера, а яваскрипт не понял бы его?

кстати, в этом свете выходит, что Котеровский JsHttpRequest тоже дыряв?
 
Я правильно понимаю, что если бы там был XML, то XMLHTTPRequest не запросил бы его с чужого сервера, а яваскрипт не понял бы его?
Если бы там было что-то, загружаемое не через <script src="">, оно не загрузилось бы, да.

Я не пользовался котеровским скриптом, а что, он в себя js грузит?
 
он, собственно, и основан, если я ничего не путаю, на динамической подмене script src
 
Ммм, не думаю, вроде как там функциональность обычного "аякса" с кроссдревнебраузерностью и добавленными подпорками в лице загрузки файлов (input type=file) через ифреймы.

-~{}~ 21.09.08 17:20:

p.s. Но вообще, достаточно иметь в виду, что персонализированные javascript отдавать нельзя.
 
Объект XMLHTTPRequest может обмениваться данными только в пределах одного домена, как и iframe.

Тем не менее, внешние скрипты (подключенные через <script>) подчиняются другим правилам и могут быть загружены и выполнены с любого домена.

Так что сам по себе AJAX абсолютно безопасен, когда передача данных идем методами объекта XMLHTTPRequest. А в реализации Котерова (в серверной части) вполне можеть быть "дыра", когда эмулируется работа XHR через динамическое подключения скрипта.

Только сейчас это практически не актуально, ведь XHR поддерживается абсолютным большинством браузеров. А <script> используют только для кросс-доменной передачи данных, где должна быть предусмотрена безопасность передачи, чего, видимо, не сделали на Яндексе.
 
Её невозможно предусмотреть
получается, что Json можно использовать только для данных, не требубщих защиты.
 
*****
он, собственно, и основан, если я ничего не путаю, на динамической подмене script src
Не путаешь. Для старых браузеров и кросдоменных запросов используется подмена script src, для загрузки файлов используется input type=file, а в остальных случаях XMLHTTPRequest.

Интересно, а можно-ли как-либо защитить отдачу персонализированных данных в виде JavaScript, в связи с тем, что XMLHTTPRequest не поддерживает запросы на поддомены основного домена.
 
То есть, в данном случае яндекс отдает не джейсон, а чистый яваскрипт? Я просто не очень знаком с клиентскими технологиями.
 
*****
Да, он передает ответ в виде верного JavaScript, а не JSON. Т.е. ответ примерно следующий:
PHP:
var someVar = {"property":"value"};
Следовательно, someVar становится доступен на странице. Если бы ответ был просто JSON:
PHP:
{"property":"value"};
То подключив такой скрипт через <script> - ничего бы невозможно было бы узнать.

Другой вопрос в том, что JSON используется для передачи данных объектом XHR, потому что в случае с <script> он становится бесполезен (по причине, описанной выше).
 
по хорошему это "топик про реферер" вид сбоку, методы защиты те же (только проблема асинхронности более вероятная)

>>Если бы ответ был просто JSON:{"property":"value"};
То подключив такой скрипт через <script> - ничего бы невозможно было бы узнать.

а, точно.
ну лоханулись они, да :)
 
да, тут же получается что при аудите бехопасности ajax-решений надо учесть все возмозжные баги в защите доступа к "чужому" js/DOM в браузерах.

был, например, способ "умышленного" обхода таких ограничений через буферный iframe с пустым src, но тут обе стороны должны хотеть такого обхода :)
 
Да, но ведь не обязательно обращаться через <script>
можно ведь обратиться через старый механизм отправки формы... но тогда мы никак не получим доступ к тексту ответа... так?
 
*****
можно ведь обратиться через старый механизм отправки формы... но тогда мы никак не получим доступ к тексту ответа... так?
Если использовать iframe, то данные между доменами можно передавать используя #якорь в урле, так как браузеры позволят его поменять даже если iframe загружен с другого домена. Подробнее этот метод описан здесь - http://javascript.ru/ajax/cross-domain-scripting
 
Сверху