如何使用Web应用程序的密钥安全地实现访问?

时间:2012-05-31 15:20:09

标签: ruby-on-rails security

我正在开发一个Rails应用程序,用户无需注册即可添加帖子。我想生成一个随机的唯一键,并提供编辑其帖子的链接,例如:http://mygreatapp.com/post/edit/f7smSDf34Sad。 Craigslist使用了类似的方法。

我的想法是在创建帖子时生成一个随机的唯一字符串,并将其与其他帖子数据一起保存在数据库中。然后检查数据库中的字符串是否与请求中的字符串匹配。解决方案安全吗?

你会如何实现它?

编辑:感谢您的回复。但是,生成随机字符串不是问题。我担心数据库中的安全和实施。

2 个答案:

答案 0 :(得分:1)

如果我要实现这个,我将使用friendly_id gem,因为你基本上正在为数据库中的每条记录创建一个独特的slug。 friendly_id默认情况下会使用一列来创建slug。您可以告诉friendly_id使用id列,然后覆盖其normalize_friendly_id方法。

在该方法中,您将生成一个唯一的字符串,然后将其返回。此方法返回的文本是friendly_id将用于生成slug的文本。

要生成slug,您只需使用MD5哈希,或者可以执行this之类的操作:

(0...50).map{ ('a'..'z').to_a[rand(26)] }.join

使用这种方法而不是简单地创建/存储slug的好处是你不必执行Post::find_by_slug(slug),你仍然可以使用Post::find(slug)因为friendly_id处理查找记录slu。。

Railscasts episode覆盖了friendly_id gem

答案 1 :(得分:0)

我在我的应用程序中使用类似的东西(to_param由您的控制器/视图调用以生成路径)

class Post < AR::Base
  def to_param
    Digest::SHA1.hexdigest("--#{self.if}--#{self.created_at}--")
  end
end

唯一的问题是SHA1生成长字符串。您可以使用MD5代替......