Данные кросс-серверной формы для безопасной отправки

1

Я отправляю важную информацию из формы на одном веб-сайте в другой (2 разных поддомена на одном сервере). Из-за того, что принимающая сторона находится в другом субдомене, я не могу заставить ее регистрироваться (например, если бы она была в том же), и это делает мой приемный конец очень уязвимым, потому что его можно легко вызвать из другого места, чтобы сделать он работает в обход моей формы (что очень плохо).

Как я могу сделать это более безопасным? Могу ли я отправить какой-то маркер безопасности вместе с моей формой, которая не может быть перехвачена (потому что я предполагаю, что массив $ _POST просто содержит маркер безопасности, который можно легко перехватить, делая его бесполезным. Исправьте меня, если я ошибаюсь здесь) или, может быть, ограничить принимающую сторону только прием данных из одного конкретного места (например, определенного URL-адреса или IP-адреса)?

Это важный проект, поэтому я не против переполнять его безопасностью.

Теги:
security
forms
post
cross-domain

2 ответа

2

Я не могу заставить его регистрироваться

Да, ты можешь. Единый вход по доменам - довольно хорошо документированная проблема, и вы даже не имеете дело с несколькими доменами. Это еще проще в субдоменах.

Могу ли я отправить какой-то маркер безопасности вместе с моей формой

Да. Создайте токен. Храните его на сервере. Поместите его в форму. Отправьте форму.

которые не могут быть перехвачены

Отправьте форму через SSL.

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


Можете ли вы сказать мне о хорошем способе ограничения targetForm.php на получение информации только из a.domain.com/form.php или ip?

Вы ищете защиту от CSRF. Вам нужно будет выполнить сеанс в своих поддоменах (что вы можете сделать, см. Выше примечания к файлам cookie), а затем использовать токен синхронизации (который вы храните в форме и сеансе, а затем сравниваете в form.php).

0

Я бы взял простой подход:

  1. Форма находится на субдомене A, скажем, a.domain.com/form.php
  2. Форма отправляет данные в один и тот же субдомен или даже скрипт (почему бы и нет), a.domain.com/form.php
  3. form.php использует cURL для отправки запроса POST на b.domain.com/targetForm.php
  4. b.domain.com/targetForm.php принимает запросы только от b.domain.com IP или что-то в этом роде

Таким образом, вы все равно можете потребовать, чтобы пользователи вошли в систему на a.domain.com, чтобы отправить форму, и когда все будет в порядке, переместите эти данные на b.domain.com/targetForm.php, которые вы сделаете для принимать запросы только от a.domain.com.

  • 0
    Я делаю первые 3 шага, но вместо этого отправляю данные поста, используя этот метод ( stackoverflow.com/questions/5647461/… ). Моя проблема именно в том, чтобы сделать шаг 4. Можете ли вы рассказать мне о хорошем способе ограничить targetForm.php получением информации только от a.domain.com/form.php или это ip?
  • 1
    Вы должны увидеть IP-адрес в $_SERVER['REMOTE_ADDR'] (IP-адрес удаленного сервера в сценарии, на который вы отправляете данные). Кроме того, если оба субдомена могут обращаться к одному и тому же серверу базы данных, например, вы также можете передать некоторую информацию, которую вы можете использовать на целевом субдомене, для аутентификации пользователя (какой-то токен, идентификатор сеанса и т. Д.).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню