2010-10-29 1 views
2

Учитывая все покрытие, которое FireSheep получает, я пытался разработать оптимальные методы балансирования использования HTTP/HTTPS для некоторых сайтов, которыми я управляю (например, сайты блогов, сайты журналов с комментариями пользователей).HTTP-сайт с API JSONP через HTTPS?

Для меня его более убить, чтобы доставлять все страницы по HTTPS, если пользователь вошел в систему. Если страница является общедоступной (например, в блоге), мало что зашифровано публичной страницей. Все, что я хочу сделать, это предотвратить захват сеанса, обнюхивая куки по HTTP-каналам.

Так, один план:

  • Войти форма над HTTPS
  • Выпуск два печенья: один печенья является «общественность» и определяет там пользователя только для чтения аспектов (например, «Добро пожаловать боб!») , Второй файл cookie является закрытым и только HTTPS. Это cookie, который проверяется всякий раз, когда пользователь вносит изменения (например, добавляет комментарий, удаляет сообщение).

Это означает, что все «меняющиеся» запросы должны выдаваться через HTTPS.

Мы используем много AJAX. Действительно, многие формы комментариев используют AJAX для публикации контента.

Очевидно, что я не могу использовать AJAX для публикации содержимого на HTTPS-сервере из интерфейса HTTP.

Мой вопрос: могу ли я использовать инъекцию скрипта (я думаю, что это обычно называется «JSONP»?) Для доступа к API? Таким образом, в этом случае будет публичная страница HTTP, которая отправляет данные в частный бэкэнд путем ввода сценария, доступного через HTTPS (чтобы частный файл cookie был виден в запросе).

У вас есть HTTPS-контент внутри HTTP-страницы? Я знаю, что вы получаете предупреждения по-другому, но я полагаю, что HTTPS внутри HTTP не является нарушением безопасности.

Будет ли это работать? Кажется, он работает в хроме и FF, но его IE, который будет сторонником pooper!

ответ

0

Проблема с JSONP заключается в том, что вы можете использовать ее только для GET.

У вас есть HTTPS-контент на странице HTTP-сообщения ? Я знаю, что вы получаете предупреждения по-другому, но я считаю, что HTTPS внутри HTTP не является безопасностью breach.breach.

В том числе содержимое HTTPS на обычной странице HTTP не будет создавать никаких предупреждений в любом браузере. Однако я не думаю, что JSONP поможет вам в этом. Использование GET для публикации контента и изменения данных - очень плохая идея, и склонны к другим атакам, например, CSFR

+0

Да, использование API на основе GET не является идеальным. Но я не знаю другого пути. Я предполагаю, что вы можете обеспечить GET-вызов с однократными токенами доступа и т. Д. Но не идеально. –

1

Другой способ - иметь iframe, который указывает на страницу https, которая может делать все виды (GET, POST, PUT и т. Д.)) Ajax вызывает сервер поверх https (тот же домен, что и iframe, тоже на https). Как только ответ вернется в iframe, вы можете отправить сообщение обратно в основное окно с помощью HTML5 postMessage API.

Pseudo code: 
    <iframe src="https://<hostname>/sslProxy"> 
    sslProxy: 
     MakeAjaxyCall('GET', 'https://<hostname>/endpoint', function (response) { 
      top.postMessage(response, domain); 
     }); 

Это работает во всех современных браузерах, кроме IE < = 7, для которого вам придется либо прибегнуть к JSONP или поперечной связи домена с помощью Flash.

+0

Хорошая идея. Почему это не работает в IE 6? –

+0

@onewheelgood IE6/7 не поддерживают API postMessage HTML5. – mikermcneil