Шифрование ссылок с django и python - PullRequest
0 голосов
/ 13 декабря 2010

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

Есть похожий вопрос здесь , но явозникают проблемы с кодировкой символов, поскольку я хотел бы, чтобы URL-адреса типа /file/encrypted_string/ указывали на представления для загрузки, поэтому лучше всего было бы, если зашифрованный результат содержит только буквы и цифры.Я предпочитаю не использовать хеш, потому что я не хочу хранить где-нибудь хэш-файл сопоставления.Я не знаю, есть ли хорошее шифрование, которое отвечает моим потребностям ...

Ответы [ 4 ]

2 голосов
/ 14 декабря 2010

Звучит так, как будто это будет легко, особенно если вы не против использовать один и тот же ключ шифрования навсегда.Просто разделите строку (/ или: работает так же, как и все остальное) для имени файла, даты / времени и всего, что вы хотите включить, затем зашифруйте и отправьте b64!Не забудьте использовать urlsafe_b64encode, а не обычный b64encode, который будет генерировать битые URL.Это будет длинная строка, но что с того?

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

Конечно, если файл не существует, не позволяйте им видеть декодированный результат...

1 голос
/ 13 декабря 2010

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

Edit: Вам все равно нужно будет сохранить дату, чтобы реализовать истекающие ссылки. Таким образом, вы можете хранить дату истечения срока действия, ключ с ключом и периодически отбирать ссылки с истекшим сроком действия из таблицы.

0 голосов
/ 13 декабря 2010

Вы можете закодировать любой символ в URL, с помощью django вы можете использовать его фильтр urlencode .

Однако генерация случайной строки и сохранение сопоставления более безопасны.

0 голосов
/ 13 декабря 2010

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

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