Продукт, который я помогаю разработать, будет в основном работать как это:
с нашего сервера.
собирает текстовое содержание страницы и отправляет его на наш сервер через запрос POST (междоменный, с помощью a
в
).
на странице для сбора и POST текстовое содержание снова.Проблема состоит в том, что эта система кажется по сути небезопасной. В теории любой мог имитировать запрос POST HTTP (включая заголовок ссылающегося домена, таким образом, мы не могли только проверить на тот), который отправляет содержание страницы на наш сервер. Это могло включать любое текстовое содержание, которое мы будем затем использовать для генерации ссылок сходных материалов для той страницы.
Основная трудность при том, чтобы заставлять это защитить состоит в том, что наш JavaScript публично видим. Мы не можем использовать вид закрытого ключа или другого загадочного идентификатора или шаблона, потому что это не будет секретным.
Идеально, нам нужен метод, который так или иначе проверяет, что запрос POST, соответствующий конкретной Веб-странице, подлинен. Мы не можем только очистить Веб-страницу и сравнить содержание с тем, что было ОТПРАВЛЕНО, начиная с цели наличия JavaScript утверждают, что содержание - то, что это может быть позади системы входа в систему.
Какие-либо идеи? Я надеюсь, что объяснил проблему достаточно хорошо. Заранее спасибо за любые предложения.
Если вы можете добавить серверный код на сайт, отправляющий данные на ваш сайт, вы можете использовать MAC, чтобы, по крайней мере, не допустить, чтобы пользователи, не вошедшие в систему, отправка чего угодно.
Если кому-либо разрешено использовать эту страницу, я не могу придумать водонепроницаемого способа подтверждения данных без очистки веб-страницы. Вы можете усложнить отправку произвольного контента с помощью проверок рефереров и прочего, но не на 100% невозможным.
Как насчет:
Сайт A создает одноразовый номер (в основном случайную строку), отправляет его на ваш сайт B, который помещает его в сеанс. Затем, когда сайт A отправляет запрос POST с сайта, он отправляет одноразовый номер вместе с запросом, и запрос принимается только в том случае, если одноразовый номер совпадает с тем, который указан в сеансе сайта B.
Вы можете иметь хэшированные ключи, специфичные для - каждого IP-адреса каждого клиента, и сравнивать это значение на сервере для каждого сообщения, используя IP в заголовке сообщения. Положительная сторона этого заключается в том, что если кто-то подделывает свой IP-адрес , ответ по-прежнему будет отправлен на поддельный IP-адрес и , а не на злоумышленника. Возможно, вы уже знаете это, но я также предлагаю добавить соль в ваши хэши.
С поддельным IP-адресом невозможно правильное TCP-рукопожатие, поэтому подделанный пост злоумышленники не завершают.
Могут быть другие проблемы безопасности, о которых я не знаю, но я думаю, что это может быть вариант
Предоставляйте людям ключи для каждого домена.
Заставьте людей включать в запросы хеш значение [строка ключа + параметры запроса]. (Хеш-значение должно быть вычислено на сервере)
Когда они отправят вам запрос, вы, зная параметры и ключ, можете проверить его достоверность.
Основным недостатком системы, как вы описали, является то, что вам «дано» содержимое страницы, почему бы не пойти и не получить содержимое страницы для себя?
] Это предотвращает "передачу" вредоносного контента на ваш сервер и позволяет вам предоставить некоторую форму ключа API, который связывает запросы и домены или страницы вместе (например, ключ api 123 работает только для рефереров на mydomain.com - все остальное явно подделано ). Благодаря кешированию / прокси-серверу ваше приложение в некоторой степени защищено от любой формы атак типа DOS, так как содержимое страницы обрабатывается только один раз каждый раз, когда истекает TTL кеша (и теперь вы можете обрабатывать возрастающие нагрузки, увеличивая TTL до тех пор, пока вы может принести дополнительную возможность обработки).Теперь ваш клиентский скрипт безумно мал и прост - больше не нужно очищать контент и публиковать его - просто отправьте запрос ajax и, возможно, заполните пару параметров (ключ api / страница).
Вы может очистить сайт, и если вы получите ответ с кодом 200, включая ваш скрипт, просто используйте его. Если нет, вы можете решить информацию из своего «прокси-сервера», тогда проблема будет связана с сайтами, которые вы не можете очистить.
Для повышения безопасности в этих случаях у вас может быть несколько пользователей, отправляющих страницу, и отфильтровывать любую информацию, которая отсутствует в минимальном количестве ответов. Это также будет иметь дополнительное преимущество в виде фильтрации любого пользовательского контента. Также не забудьте зарегистрировать пользователя, которого вы просите выполнить работу через прокси, и убедиться, что вы получаете страницы только от пользователей, которых вы попросили выполнить эту работу. Вы также можете попытаться убедиться, что у очень активных пользователей не будет больше шансов выполнить работу, что затруднит «ловлю» для работы.
Может ли веб-издатель также разместить прокси-страницу на своем сервере?
Затем загрузите скрипт через прокси. Затем у вас есть ряд возможностей, в которых вы можете контролировать соединение между двумя серверами, добавлять шифрование и тому подобное.
Что такое система входа в систему? Как насчет использования единого входа и разделения скриптов?