Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用web应用程序的密钥安全地实现访问?_Ruby On Rails_Security - Fatal编程技术网

Ruby on rails 如何使用web应用程序的密钥安全地实现访问?

Ruby on rails 如何使用web应用程序的密钥安全地实现访问?,ruby-on-rails,security,Ruby On Rails,Security,我正在开发一个Rails应用程序,用户无需注册即可添加帖子。我想生成一个随机的唯一键,并提供一个链接来编辑他们的帖子,例如:。Craigslist也采用了类似的方法 我的想法是在帖子创建时生成一个随机的、唯一的字符串,并将其与其他帖子数据一起保存在数据库中。然后检查数据库中的字符串是否与请求中的字符串匹配。这个解决方案安全吗 您将如何实施它 编辑:感谢您的回复。但是,生成随机字符串不是问题。我关心的是数据库的安全性和实现 如果我要实现这一点,我会使用gem,因为您基本上要做的是为数据库中的每条记

我正在开发一个Rails应用程序,用户无需注册即可添加帖子。我想生成一个随机的唯一键,并提供一个链接来编辑他们的帖子,例如:。Craigslist也采用了类似的方法

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

您将如何实施它


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

如果我要实现这一点,我会使用gem,因为您基本上要做的是为数据库中的每条记录创建一个唯一的slug。默认情况下,friendly_id将使用列来创建slug。您可以告诉friendly_id使用
id
列,然后重写他们的
normalize_-friendly_id
方法

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

要生成slug,您可以简单地使用MD5哈希或执行以下操作:

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


如果我要实现它,我会使用gem,因为您基本上要做的是为数据库中的每条记录创建一个唯一的slug。默认情况下,friendly_id将使用列来创建slug。您可以告诉friendly_id使用
id
列,然后重写他们的
normalize_-friendly_id
方法

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

要生成slug,您可以简单地使用MD5哈希或执行以下操作:

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


在我的应用程序中,有一个覆盖友好的_idgem的函数

我使用类似的函数(您的控制器/视图调用to_参数来生成路由)

class Post

唯一的问题是SHA1生成长字符串。您可以改用MD5…

我在我的应用程序中使用类似的功能(您的控制器/视图会调用to_param来生成路由)

class Post

唯一的问题是SHA1生成长字符串。您可以改用MD5…

确保密钥不可猜测,并且不会显示在任何公共页面上。此外,您还可以在编辑帖子后向帖子的所有者发送通知。请确保密钥不可猜测,也不显示在任何公共页面上。此外,你可以在帖子编辑后向帖子的所有者发送通知。友好id gem可能会非常有用。谢谢。友好的宝石可能会很有帮助。谢谢
(0...50).map{ ('a'..'z').to_a[rand(26)] }.join
class Post < AR::Base
  def to_param
    Digest::SHA1.hexdigest("--#{self.if}--#{self.created_at}--")
  end
end