我有一个相当普通的注册系统,我的Rails 4应用程序,我想添加一个奇怪的功能。我希望提供多个注册表单,并秘密地为新用户对象设置一个值,该值是根据该页面提交数据的。
出于安全原因,我目前的做法是不好的。它可以正常工作,但精明的用户可以使用浏览器的开发工具来更改隐藏字段的值,并表明它们来自不同的页面。
routes.rb
get '/signup', to: 'users#new'
get '/red-signup', to: 'users#new', color: 'red'
get '/blue-signup', to: 'users#new', color: 'blue'users_controller.rb
def new
@user = User.new
@color = params[:color] || 'grey' # default of grey
endusers/new.html.erb
<%= form_for(@user) do |f| %>
...
<%= f.hidden_field :color, value: @color %> # VULNERABLE TO TAMPERING
<%= f.submit "Create my account" %>
<% end %>所以,我想要一种防篡改的方法来区分来自不同页面的新注册。我认为这意味着将任何有意义的标记都排除在表单数据之外。
对探索的方法有什么建议吗?
发布于 2014-10-23 12:25:52
如果您的目标是在new和create操作之间安全地传递new值,则可以为此目的使用会话。在new操作中设置颜色:
def new
@user = User.new
session[:color] = params[:color] || 'grey' # default of grey
end然后在create操作中,您可以检索它:
def create
@color = session[:color]
endRails会话数据在默认情况下存储在Cookies中,并通过加密签名使其具有抗篡改性。它也是加密的,所以任何访问它的人都不能读取它的内容。
发布于 2014-10-22 23:43:03
最终目的是什么?
如果要知道哪种注册表单的转换率更高,那么您正在重新发明轮子,您应该看看A/B测试和那些宝石是否做对了。
https://stackoverflow.com/questions/26518257
复制相似问题