Как безопасно передавать данные между веб-сайтами? - PullRequest
0 голосов
/ 26 февраля 2012

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

Скажите, у меня есть портал A. И я хочу получить доступ к сайту B.

Если B нужна критическая информация, чтобы работать как username. Я хочу передать эту информацию безопасно.


поэтому я делаю форму так:

 <%--------------------------------------------------------------------------------------%>
    <form id="frm_sal" action="B URL the first page" method="post">
    <input id="hdn_sal_Emp_Num" type="hidden" runat="server" name="hdn_sal_Emp_Num" />
    <input id="hdn_sal_user_name" type="hidden" runat="server" name="hdn_sal_user_name" />
    <input id="hdn_sal_result" type="hidden" runat="server" name="hdn_sal_result" />
    </form>
  <%--------------------------------------------------------------------------------------%>

и в случае, если клиент кликнет по ссылке на портале A, я отправлю эту форму.

Одна форма для каждого сайта.

Мой вопрос о том, как защитить эти данные и предотвратить подделку.

Ответы [ 3 ]

2 голосов
/ 26 февраля 2012

Зашифруйте информацию в <form> перед отправкой клиенту, затем расшифруйте ее на другом конце, используя закрытый ключ.

Вот хороший пример шифрования. Шифрование и дешифрование строки

Вот что мне нравится делать.Создайте класс с именем SharedSession и добавьте свойства, которыми вы хотите поделиться, свойства могут даже быть другими классами.Добавьте также метку времени.Сериализуйте класс в строку Json ( Json.net ), зашифруйте его и поместите в поле формы.

Когда форма отправляется на другую сторону, десериализуйте ее как 'SharedSession 'class.

Используйте поле отметки времени по двум причинам:

1), чтобы зашифрованные данные выглядели всегда измененными.Например, если вы отправляете одни и те же учетные данные для текущего пользователя снова и снова, зашифрованная строка никогда не изменится, поэтому временная метка заставляет зашифрованную строку каждый раз появляться по-разному.

2), чтобы убедиться, чтоопубликованные данные не устарели или устарели.Установите порог около 1 минуты или около того.Если данные старше 1 минуты, выбросьте их.

EDIT

Еще одна вещь ... не называйте скрытое поле формы SharedSessionData или что-либо, что может заинтересовать хакера. Вызовитеэто что-то вроде «рекламные рекламные данные», чтобы выбросить их.

Надеюсь, это поможет.

2 голосов
/ 26 февраля 2012

Есть несколько способов, которыми это может работать.

Первым было бы зашифровать строку запроса в какой-то момент, на ум приходит mcrypt, который прилично поддерживается кроссплатформенным, это зависит от человека, не ломающего вашу соль / ключевую фразу, это можно смягчить путем частой замены соли. Другой проблемой, с которой вы столкнулись, является ответная атака, когда кто-то копирует и вставляет URL-адрес одного пользователя в другой браузер, по сути копируя запрос. Этого можно избежать, используя datetime в URL вместе с одноразовым токеном, который нельзя использовать повторно.

Другим способом будет обмен данными между двумя серверами, когда вы отправляете пользователя с одного сайта на другой, вы отправляете данные (с уникальным токеном / guid) через протокол связи сервера каким-либо образом (SOAP, REST, что-то сделано), а затем просто дать пользователю маркер для передачи.

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

Последний вариант - иметь общее хранилище данных, то есть базу данных, с которой оба веб-сервера могут «общаться» для запроса информации о пользователях. Это проще сделать, если они находятся в одном домене, поэтому вы можете установить cookie-файл сеанса, который работает на обоих сайтах, если нет, то вам нужно вернуться к уникальному токену, который передается.

1 голос
/ 26 февраля 2012

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

Есть несколько способов, которым я верю, и я не думаю, что я достаточно осведомлен, чтобы сказать вам, что является лучшим, но я надеюсь, что те ссылки, которые я предоставил, укажут вам правильное направление!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...