PHP - безопасная передача данных с сайта на другой сайт - PullRequest
8 голосов
/ 21 марта 2011

У меня есть сайт, который может принимать запросы от нескольких сайтов.Вроде как проверка обновлений.Эти сайты будут отправлять информацию, такую ​​как имена пользователей, пароли, версию приложения и т. Д., А затем мой сайт отправит ответ на основе этой информации.

По сути это запрос $_GET, что-то вроде:

http://www.mysite.com/?user=boo&password=foo&version=4

Мне было интересно, возникнут ли какие-либо проблемы с безопасностью при подобных вещах.Могут ли эти данные быть как-то «перехвачены»?

Ответы [ 3 ]

9 голосов
/ 21 марта 2011

Хорошо, я бы настоятельно рекомендовал , а не отправлять имя пользователя / пароль в виде обычного текста при любых обстоятельствах (даже при использовании SSL). Вместо этого я бы предложил использовать дайджест-форму аутентификации.

Вместо этого я бы предложил генерировать большой токен аутентификации (случайная строка большого размера, 128 символов будет работать). Затем пользователи установят этот «токен» в свое приложение.

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

Теперь ваше приложение получает этот токен дайджеста (здесь он называется $dt). Затем вы делаете это с предварительно настроенным токеном аутентификации, который уже был предоставлен.

$authBit = $username . ':' . $authToken;
$hash = hash_hmac('sha256', $authBit, $digestToken);
$authField = $username . ':' . $hash . ':' . $digestToken;

Затем вы отправляете $authField на сервер. Затем сервер разделит части:

list ($user, $hash, $digestToken) = explode(':', $authField);

Теперь вы сначала просматриваете токен аутентификации пользователя в базе данных и сохраняете его в $authToken. Затем вы просматриваете $digestToken, чтобы убедиться, что он существует и что он был создан менее 60 секунд назад (вы можете настроить его, если он слишком короткий, но не сделать его значительно длиннее). В любом случае, удалите его из БД в этот момент (чтобы предотвратить его повторное использование).

Теперь, если $digestToken существует и является действительным, и вы можете найти $authToken, тогда просто выполните следующую проверку:

$stub = $user . ':' . $authToken;
if ($hash == hash_hmac('sha256', $stub, $digestToken)) {
    //valid user
} else {
    //Not valid
}

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

3 голосов
/ 21 марта 2011

Безопасность через мрак не работает, а использование POST вместо GET лишь немного затрудняет получение информации, если вы действительно просматриваете пользователя через плечо.

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

Однако лучший способ предотвратить захват конфиденциальных данных - это не передавать их в первую очередь. Подумайте, возможно ли, чтобы приложение проверяло наличие обновлений без передачи пароля. Если доступно обновление, вы можете отправить пользователя на веб-страницу с помощью HTTPS, чтобы загрузить обновление, что избавит вас от необходимости внедрения SSL самостоятельно.

0 голосов
/ 21 марта 2011

Используйте .htaccess, чтобы изменить и скрыть URL вашего сайта. например:

www.mysite.com/index.php?cat=1234&foo=5678

будет выглядеть так:

www.mysite.com/cat-1234-foo-5678-index.html

при успешном создании файла .htaccess оба URL будут действовать одинаково.

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