сделать определенный URL действительным только в течение 48 часов

1

Мне нужно сделать определенный URL действительным только в течение 48 часов. Эта ссылка создается на сервере и отправляется клиенту по электронной почте.

То, что я думал делать, - это встраивание на сервер закодированной метки времени.

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

Каковы наилучшие методы для этого сценария?

  • 0
    Что произойдет, когда истечет срок действия URL? Вы бы вернули 404 на сервере, если пользователь попытался получить доступ к URL? Вы не можете заставить URL-адрес исчезнуть из электронного письма, так что я думаю, что это ваши варианты, поэтому не нужно беспокоиться о расшифровке чего-либо на стороне клиента.
  • 0
    Ответ во многом будет определяться поведением URL за пределами периода времени: что должно произойти, когда URL посещают в другое время?
Показать ещё 1 комментарий
Теги:

4 ответа

8
Лучший ответ

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

2

Если вы хотите реализовать свой чек, например @craig1231, предложили, кто использует вашу идею, чтобы "закодировать" временную метку, вы можете использовать такой код:

    private const string SECRET = "secret of your choice";

    private string getSHA1Hash(string strToHash)
    {
        System.Security.Cryptography.SHA1CryptoServiceProvider sha1Obj = new System.Security.Cryptography.SHA1CryptoServiceProvider();
        byte[] bytesToHash = System.Text.Encoding.Default.GetBytes(strToHash);
        bytesToHash = sha1Obj.ComputeHash(bytesToHash);
        string strResult = "";
        foreach (byte b in bytesToHash)
        {
            strResult += b.ToString("x2");
        }
        return strResult.ToLower();
    }

    public bool IsValidRequest(long expiryTicks, string hash)
    {
        var expiried = new DateTime(expiryTicks);
        var toHash = expiryTicks + SECRET;
        if (expiried < DateTime.Now)
            return false;
        if (hash.ToLower() == getSHA1Hash(toHash))
            return true;
        return false;
    }

    public string GetHashForExpiryTicks(long expiryTicks)
    {
        var toHash = expiryTicks + SECRET;
        return getSHA1Hash(toHash);
    }

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

var hash = GetHashForExpiryTicks(DateTime.Now.AddHours(48).Ticks);
  • 0
    не должно быть: expiried <DateTime.Now
  • 0
    Как проверить пример запроса URL полного исходного кода? IsValidRequest(????, ????
1

Способ использования Amazon S3 состоит в том, чтобы иметь истечение и хешированный параметр...

http://www.myurl.com/index.php?expire=1409140600&hash=3984cfabc

Таким образом, хешированный параметр проверяет URL-адрес, а параметр expiry проверяет дату

  • 0
    Как создать URL-адрес и как его проверить?
1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню