Зашифрованный идентификатор в URL - PullRequest
1 голос
/ 15 марта 2010

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

По сути, мои URL-адреса будут выглядеть примерно так: /plan / 0AUTxwoGkOYfiZGd2 вместо /plans/304.

Будет ли лучший способ сделать это, просто использовать SHA-1 для хэширования идентификатора плана и сохранять его в столбце hashed_id для планов? Затем перезаписать to_param и добавить искатель для поиска по hashed_id?

Как вы гарантируете, что сгенерированные символы будут 0-9, a-z или A-Z?

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 июля 2017

я использую https://github.com/norman/friendly_id таким образом:

  # app/models/secret.rb; this would go in the model you want to obfuscate
  class Secret < ActiveRecord::Base
    has_friendly_id :code, :use_slug => true

    validates :name, :uniqueness => true

    def code
       Digest::SHA1.hexdigest self.name
    end
  end

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

1 голос
/ 15 марта 2010

> Как убедиться, что сгенерированные символы являются 0-9, a-z или A-Z?

idForURL = URI.escape((Base64.encode64(hash).strip))

Я однажды зашифровал идентификатор с помощью Blowfish , это не супер безопасно, но довольно удобно и идентификатор становится короче, чем для GUID или SHA-1.

require 'digest/sha1'
print Digest::SHA1.hexdigest("Let's see how long this gets.")
=> b26316a2db52609f86b540de65282b9d367e085c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...