Зашифровать / кодировать идентификатор в строке URL - PullRequest
5 голосов
/ 09 февраля 2011

Просто пытаюсь обеспечить некоторую безопасность на моем веб-сайте и пытаюсь найти наилучший маршрут для защиты идентификатора.

Пример: http://localhost/page.php?id=90 TO: http://localhost/share/22349234987sdsdf9sdf87423498asf9

Я использую HTACCESS для общего доступа. Но хотел бы скрыть «90» и попытаться отговорить кого-либо от простого добавления случайных чисел, чтобы попытаться получить другой ответ.

Есть какие-нибудь мысли о том, как создать что-то подобное или, если что-то уже существует, что хорошо работает с реализацией?

Безопасность является фактором, поэтому просто пытаемся найти лучшее решение там ...

Ответы [ 3 ]

3 голосов
/ 09 февраля 2011

Сокрытие идентификатора - неясность, а не безопасность.

Если вам нужна хорошая незаметность, посмотрите на mcrypt функции в PHP. Обязательно добавляйте соль перед кодированием и декодированием, иначе будет легко угадать шифрование / дешифрование.

И помните, что кто-то еще может наткнуться на ваши URL, полностью победив это. Я бы также использовал некоторую форму HTTP-аутентификации через HTTPS, если вам нужна безопасность.

2 голосов
/ 09 февраля 2011

Мой друг реализовал метод подписания всех запросов GET с помощью токена текущего сеанса и секрета для предотвращения CSRF-атак.

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

Вы можете создать хеш MD5, который похож на исходный URL, и сохранить оба в базе данных.

Теперь, когда открыт / share / someLongId, вы можете проверить вбаза данных, к которой принадлежит URL, который принадлежит хешу, и может перенаправить пользователя на этот URL.

Другая возможность состоит в том, чтобы сначала использовать GUID вместо автоматически увеличивающихся идентификаторов.Таким образом, все идентификаторы будут длиннее и их будет не так просто угадать.

1 голос
/ 09 февраля 2011

В зависимости от того, требуется ли вам (URL) быть постоянным или нет, вы можете сделать следующее:

непостоянный: сделайте что-то вроде этого:

function getLink($id) {
   $random = md5(uniqid());
   $_SESSION['links'][$random] = $id;
   return "http://localhost/share/$random";
}
echo getLink(10);

и затем:

function getTrueId($id) {
  if(isset($_SESSION['links'][$id]) {
     return $_SESSION['links'][$id];
  } else {
     die("Unknown link!");
  }

}

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

...