2010-11-16 1 views
1

Позволяет себе представить, что сайт A встраивает javascript-файл, используя стандартный тег сценария, указывающий на сервер B. Следующий сайт A делает запрос JSONP или AJAX ресурсу на сервере B. В любом случае серверу B необходимо знать, что конкретный запрос JSONP исходит от пользователя на сайте A, а не пользователя на другом сайте, подменяющего их HTTP REFERRER.Есть ли способ безопасно знать, исходящий сервер, на котором есть вызов AJAX?

Единственная причина, по которой я думаю, что существует какая-либо область возможностей, так это потому, что сайт А начал общение с его встраиванием в javascript сервера B. В некотором смысле, не могло ли это первоначальное сообщение действовать как рукопожатие безопасности, позволяющее последующим вызовам проходить безопасно. Но поскольку рукопожатие было сделано с помощью небезопасных средств, это не мешает ему действовать в качестве рукопожатия безопасности.

Любые идеи о том, как эта задача может быть выполнена? Каждое решение, которое я могу придумать, нарушается понятием, что каждый элемент вызова AJAX может быть фальсифицирован.

Я читал http://www.codinghorror.com/blog/2008/10/preventing-csrf-and-xsrf-attacks.html и Detecting Ajax in PHP and making sure request was from my own website, но насколько я мог сказать, они сосредоточились на обеспечении правдоподобия пользователя, а не правдивости реферера.

ответ

0

Чтобы проверить происхождение, вы можете использовать Hash_chain.

Нагрузка на страницу генерирует X-хэш из случайного и отправляет последний хеш с начальным запросом (тегом скрипта), например. Хэш [100]. каждый следующий запрос отправляется с Hash [Last-1].

На сервере B проверьте, совпадает ли хэш (resieved_hash) с последним.

+0

Это означает, что клиент будет отвечать за создание хеш-значений. Поскольку у меня нет контроля над клиентской стороной (только это JS), не нужно ли мне хранить криптографическую функцию на стороне клиента, тем самым устраняя все преимущества безопасности. Кроме того, как это помогает мне проверить подлинность веб-страницы происхождения, так как рукопожатие происходит через AJAX? – Nucleon

+0

непонимающий проблема на месте. без контроля над сайтом A нет безопасного пути. вы можете сделать это сложнее с минимальным кодом и случайными именами в запросе. – Lauri