假设我们的users表如下:
create_table "users", :force => true do |t|
t.column "name", :string
t.column "admin", :boolean, :default => false, :null => false
end
看看我们都创建用户的action:
def create
@user = User.new(params[:user])
if @user.save
flash[:notice] = "Successfully registered"
redirect_to user_path(@user)
else
render :action => 'new'
end
end
end
我们本来不希望新用户注册时设置"admin"为1,而且我们的注册页面只允许用户输入"name"
但是由于我们使用@user = User.new(params[:user])来给@user赋值,Hacker可以这样做来注册一个管理员用户:
curl -d "user[name]=hacker&user[admin]=1" localhost:3000/users
这样Hacker就创建了一个admin用户
解决方法:
我们可以使用attr_protected
xx来限制xxx属性不被赋值
class User < ActiveRecord::Bse
has_many :comments
attr_protected :admin
end
attr_protected :admin限制了我们的admin属性不被赋值
但是User的comments仍然可以通过post comment_ids数据来hack,我们可以使用attr_accesible
xx来限制哪些属性可以赋值
class User < ActiveRecord::Base
has_many :comments
attr_accesible :name
end
我们限制只有name可以赋值,其他都不能赋值
其实很简单,我们在创建User的create方法里不使用mass assignment即可:
def create
@user = User.new(:name => params[:user][:name])
end
分享到:
相关推荐
Rails::API 是 Rails 的精简版本,针对不需要使用完整 Rails 功能的开发者。 Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比正常的 Rails ...
在本篇内容中,我们将深入探讨如何利用Ruby on Rails(简称Rails)这一强大的Web应用程序框架来构建可伸缩且易于维护的RESTful API。Rails以其简洁优雅的语法、高效的开发速度以及良好的社区支持而闻名,这使得它...
在Ruby on Rails(Rails)框架中,开发人员经常需要实现各种...通过学习这个实例,开发者可以掌握如何在Rails应用中集成第三方库,处理层级数据,以及创建交互式的前端界面。这对于提升Web应用的用户体验非常有价值。
Ruby on Rails作为一个流行的服务器端Web应用框架,提供了一系列的机制来帮助开发者防止XSS攻击。本文将详细介绍如何在Ruby on Rails中采取有效的措施来预防XSS攻击,并提供代码示例。 通过上述措施,Ruby on Rails...
#### 六、添加第二个路由 - **配置**:在`config/routes.rb`文件中添加新的路由规则,例如`get 'new_route' => 'controller#action'`。 - **效果**:这将在应用中增加一个新的URL路径,指向指定控制器的动作。 ###...
5. **Rails安全**:学习如何防止常见的Web攻击,如SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)。了解授权库如Pundit和CanCanCan,以及如何安全地处理用户输入和密码存储。 6. **部署与维护**:了解如何在各种...
Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本篇将通过一个入门实例,深入探讨Rails的基本概念和核心...
标题 "Rails相关电子书汇总" 暗示了这个压缩包包含了关于Ruby on Rails框架的电子书籍资源。Ruby on Rails,通常简称为Rails,是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,以...
- 学习如何创建第一个Rails应用程序。 - **过程**: - 创建新项目。 - 设置数据库配置。 - 创建控制器和视图。 - 在浏览器中查看结果。 #### 六、Rails的路由 - **概念介绍**: 路由是连接用户请求URL与应用...
Ruby on Rails,简称Rails,是基于Ruby语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习...
webpack-rails, 将 web pack与你的Ruby on Rails 应用程序集成 不再维护webpack-rails 不再被维护。 有关详细信息,请参阅 #90. web pack-railsweb pack 为你提供了将 web pack集成到现有的Ruby on Rails 应用程序中...
### Rails 101S: 初学者必备的Ruby on Rails 宝典 #### Introduction: 深入了解Ruby on Rails 《Rails 101S》是一本为Ruby on Rails初学者准备的手册,旨在帮助新手快速入门并掌握基本的开发技能。本手册将从最...
[Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...
自述文件 Ember Hacker News Clone的后端,在Ruby 4.2上使用 。 可以从获取Ember Hacker News克隆代码。 数据库创建 rake db:migrate rake db:fixtures:load RAILS_ENV=development
### 重构你的Rails程式码 在进行Rails版本升级时,重构代码是一个绝佳的机会。本文将深入探讨为何这是个好时机来进行重构,并提供一系列实用的方法帮助您优化代码。 #### 为什么这是一个好时机重构代码? 1. **...
### Java基础之Rails命令大全知识点解析 #### 一、Rails 命令概述 Rails 是一个用于 Web 开发的框架,它基于 Ruby 语言。Rails 遵循 MVC(Model-View-Controller)架构模式,使得 Web 应用程序的开发更加高效、简洁...
- `$ rails c` 或 `$ rails console`:启动Rails控制台,进行交互式编程。 - `$ rails server -p 3001`:在端口3001启动服务器。 - `$ rake doc:rails`:生成Rails API文档。 - `$ rails dbconsole`:打开数据库...
minitest-rails, Rails的Minitest集成 minitestRails 5的Minitest集成 安装gem install minitest-rails这将安装以下宝石:minitest配置创建一个新的Rail
Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...