2011-02-09 1 views
5

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

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

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

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

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

+0

Как это не так? он показывает простой идентификатор, который любой может изменить ... – Justin

+0

@ Justin: ну и что? Вы можете изменить 'id' здесь, на SO. Любые проблемы с этим? – zerkms

ответ

3

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

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

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

+0

Да, я реализовал это над структурой HTTPS, только ради этого мне было интересно, как лучше «скрыть» идентификатор. Я буду больше смотреть в ID MCrypt. благодаря – Justin

2

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

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

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

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

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

1

В зависимости от того, если вам нужно это (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!"); 
    } 

}

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