Продукт, который я помогаю развивать, будет в основном работать следующим образом:
- Веб-издатель создает новую страницу на своем сайте, которая включает
<script>
с нашего сервера. - Когда посетитель достигает этой новой страницы,
<script>
собирает текстовое содержимое страницы и отправляет ее на наш сервер через запрос POST (междоменный, используя<form>
внутри<iframe>
). - Наш сервер обрабатывает текстовое содержимое и возвращает ответ (через JSONP), который включает в себя фрагмент HTML, содержащий ссылки на связанный контент вокруг Web. Этот ответ кэшируется и подается последующим посетителям, пока мы не получим еще один запрос POST с текстовым контентом с того же URL-адреса, после чего мы восстановим "свежий" ответ. Эти POST-сообщения происходят только тогда, когда истекает время кэширования TTL, и в этот момент сервер это означает и запрашивает
<script>
на странице для сбора и POST текстового содержимого снова.
Проблема в том, что эта система по своей природе небезопасна. Теоретически любой может обмануть HTTP-запрос POST (включая заголовок реферера, чтобы мы не могли просто проверить это), который отправляет содержимое страницы на наш сервер. Это может включать любой текстовый контент, который мы затем будем использовать для создания связанных ссылок на контент для этой страницы.
Основной трудностью в обеспечении безопасности является то, что наш JavaScript является общедоступным. Мы не можем использовать какой-либо секретный ключ или другой секретный идентификатор или шаблон, потому что это не будет секретным.
В идеале нам нужен метод, который каким-то образом проверяет подлинность запроса POST, соответствующего определенной веб-странице. Мы не можем просто очистить веб-страницу и сравнить контент с тем, что было POSTED, поскольку цель отправки JavaScript-контента заключается в том, что он может быть за системой входа.
Любые идеи? Надеюсь, я достаточно хорошо объяснил проблему. Заранее благодарим за любые предложения.