безопасно отправлять данные с одного сайта на другой? - PullRequest
0 голосов
/ 25 июня 2009

Я собираюсь опубликовать некоторые данные с одного сайта на другой сайт. Мне нужен способ, чтобы принимающий сайт был уверен, что данные были отправлены с отправляющего сайта, а не отправлены каким-либо другим злонамеренным пользователем. Я использую PHP4.

Как я могу это сделать?

Спасибо!

Ответы [ 5 ]

3 голосов
/ 25 июня 2009

Просто используйте двусторонний ssl. Клиент аутентифицирует себя на сервере с помощью ssl-сертификата, а не только наоборот.

Итак, сервер знает, что это правильный клиент, он получает форму данных.

Клиент знает, что он отправляет данные на нужный сервер

1 голос
/ 25 июня 2009

Для решения только для PHP:

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

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

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

Вот пример кода PHP:

// On the sending end:
define('SECRET', '12734981273912379128739128739127938794729327492');
$message = 'your-message';
$packet = $message . sha1($message . SECRET);

// On the receiving end:
define('SECRET', '12734981273912379128739128739127938794729327492');
$message = substr($packet, 0, -40);
if(sha1($message . SECRET) != substr($packet, -40))
    throw new Exception("Message Authentication failed!")
else
    do_something_with($message);

Если вы хотите, чтобы хакер повторно опубликовал одно и то же сообщение, он мог добавить случайный идентификатор запроса к каждому запросу и убедиться, что один и тот же хэш НИКОГДА не принимается.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: это, как и со всем чувствительным к безопасности кодом, должно быть проверено и проверено перед доверием к конфиденциальным данным. Проведите исследование по теме или, что еще лучше, используйте существующую библиотеку, которая обрабатывает этот тип проверки + аутентификация.

1 голос
/ 25 июня 2009

решение джиттера (двунаправленный SSL) работает. Однако, возможно, более простой способ - использовать односторонний SSL (аутентификация принимающего сервера) и Basic Auth. SSL обеспечивает конфиденциальность, а Basic Auth аутентифицирует клиента.

0 голосов
/ 25 июня 2009

Мой голос за SSL, но в качестве альтернативы.

Если оба сайта знают секретный ключ (SK), тогда

  1. веб-сайт1 (WS1) может отправлять веб-сайту2 (WS2) одноразовый номер (N1)
  2. WS2 может отправить WS1 сообщение, содержащее:
    • данные (могут быть зашифрованы с использованием секретного ключа)
    • md5 (SK. N1) (то есть доказательство того, что WS2 знает SK)
    • md5 (SK. Data) (то есть доказательство того, что данные не были обработаны третьей стороной)
0 голосов
/ 25 июня 2009

Я бы посмотрел на использование GnuPG: http://devzone.zend.com/article/1265

...