2009-02-15 3 views
0

Я знаю, что есть JSONP, который включает взаимодействие с сервером для определения пространства имен данных.Позволяет решать кросс-доменную ajax, полностью на клиенте, используя теги скриптов

Что меня беспокоит тот факт, что содержание сценария тег src является оценивается, но это НЕ доступны для чтения.

<script src="http://www.google.com"></script> 

Все, что нам нужно выяснить, это как пространство имен данных, вот и все. Конечно, я пытался довольно идиотские вещи, без соответствующего результата (я знаю, что это не работает, но вы можете увидеть, что я пытаюсь добиться):

не
<script>eval('var namespace="');</script> 
<script src="http://www.google.com"></script> 
<script>eval('";');</script> 

Поскольку действительно не актуальна информация о том, как src контент оценивается, но я знаю, что это глобальный масштаб, но если бы мы могли отслеживать шаги оценки или, может быть, цепочка evals scope как-то (не так много документации об этом также), мы могли бы решить эту досадующую «оцененную, но нечитаемую» вещь ,

Любые идеи?

ответ

1

HTML5 предоставляет window.postMessage, который обеспечивает механизм для безопасного Междоменное сообщений и поддерживается Firefox 3, Opera 9.6, и WebKit nightlies.

Это Ваше предложение выше не может работать, потому что оно требует принципиально иного поведения от javascript's eval. eval анализирует и выполняет заданную строку в текущем контексте - то, что вы запрашиваете, заключается в том, что eval меняет фактический код содержащейся функции. например.

for (var i = 0; i < 10; i++) eval("; doSomething();"); 

станет

for (var i = 0; i < 10; i++) ; doSomething();; 

означая для контура становится пустым, и doSomething будет вызываться только один раз. Понятно, что это приведет к невероятно сложному пониманию семантики, а также к значительно более безопасному использованию, поскольку eval получит возможность напрямую влиять на поток управления.

1

Я не уверен, что это возможно из-за политики безопасности браузера.

0

Я склонен сказать, оставьте его. Эти проблемы будут решены, но не путем взлома того, что у нас уже есть. В этом отношении сеть в основном нарушена. Тот факт, что любой скрипт из одного домена может быть выполнен на другом, представляет собой серьезную уязвимость безопасности, которая будет препятствовать росту сети, если ее не остановить.

http://www.slideshare.net/webdirections/douglas-crockford-ajax-security-presentation

+0

Как мы можем иметь интерактивные веб-объявления, если скрипт из одного домена не может выполнить в другом ?! Вы предлагаете конец interwebs, как мы их знаем! – Jeff

+0

Я имею в виду, скрипты должны иметь разрешение для работы в других доменах. В настоящий момент будет выполняться любой JS-файл, связанный с тегом скрипта. –