При использовании PHP для передачи важных данных - PullRequest
0 голосов
/ 29 января 2010

При передаче данных в другой PHP-скрипт с использованием Get или Post, следует ли мне зашифровать его с помощью соли MD5?или есть лучший способ сделать это?

Ответы [ 5 ]

9 голосов
/ 29 января 2010

Что за данные? MD5 - это не функция шифрования, это функция хеширования - если вы используете MD5, у вас не будет «незашифрованного», вы не сможете вернуть исходные данные.

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

3 голосов
/ 29 января 2010

Это зависит от того, чего вы пытаетесь достичь.

Обычно, если вы хотите только проверить, что данные поступают из вашего приложения, передайте данные вместе с хешем, который проверяет, что данные не были подделаны.

Если вы хотите буквально зашифровать данные в запросе, вам следует заняться шифрованием, а не хэшированием.

$a = 2;
$b = 3;
$hash = sha1($salt.$a.$b)

$link = "http://www.domain.tld/?index.php?a=$a&b=$b&hash=$hash";

Тогда:

$a = $_GET['a'];
$b = $_GET['b'];

$hash = sha1($salt.$a.$b);

if ($_GET['hash'] == $hash) {
  //data ok
} else {
  // data has been tampered with
}
0 голосов
/ 29 января 2010

Если вы не хотите использовать HTTPS-соединение и не передаете конфиденциальные данные, я бы порекомендовал зашифровать данные и, возможно, использовать в процессе код аутентификации сообщения .

Возможно, вы захотите ознакомиться с руководством Mcrypt .

Хотя это не относится конкретно к данным GET / POST, я обнаружил статью под названием Шифрование PHP для обычного человека , в которой обсуждается, как защитить данные в приложении PHP.

0 голосов
/ 29 января 2010

У меня складывается впечатление, что основной причиной этого вопроса является неправильное представление о том, что PHP менее безопасен, чем другие языки веб-разработки. Другие платформы, такие как ASP / .NET, могут иметь встроенные методы для сохранения секретности, но эти методы работают, только если они используются. То же самое касается PHP. Если принять ваш вопрос как заботу о безопасности PHP (это предположение, и хотя я могу ошибаться для вас, это популярное предположение), я бы ответил: лучший способ обезопасить передачу данных с помощью PHP - это использовать те же методы. и методы, используемые для ВСЕХ других платформ, такие как SSL, надежные пароли, подтверждение IP-адресов, не оставлять ключи под ковриком (то есть файлы cookie на основе ролей) и все остальное, что предлагается для этого вопроса.

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

0 голосов
/ 29 января 2010

Если вы отправляете разумные данные (например, пароль, имя пользователя или даже электронную почту), вы должны отправлять эти данные в зашифрованном виде каким-то «надежным» способом. Его можно отправить простым, но по HTTPS, например.

Если HTTPS не поддерживается, вы всегда можете зашифровать данные с помощью некоторых бесплатных / открытых решений, таких как GnuPG .

Кстати, MD5 "односторонний" (, но его можно взломать ), поэтому вы не можете легко удалить MD5.

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