易在开发中忽略的rails安全问题

本文探讨了Rails框架中常见的安全问题——mass-assignment漏洞,并提供了解决方案。通过介绍如何使用attr_protected来保护特定属性免受非法赋值,确保应用程序的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有些安全问题在rails的开发中会被忽略的,比如rails在创建或者更新一个model的时候,支持一种mass-assignment的赋值方式,比如在controller中,创建一个user model记录

代码1:

@user=User.new(params[:user])
@user.save!


这个场景通常发生在网站注册新用户,假如user有属性用户积分point,注册表单如是写:


<form ..>
<input name='login_name'/>
<input type='password' name='password'/>
<input type ='password' name='c_password'/>
...
</form>


如果有恶意用户更改了一下表单提交参数,增加point=10000,那么上述代码1就会存在安全漏洞,因为新注册用户可以获得任意积分!

要消除这个漏洞,做法是将point属性设置为protected


attr_protected :point


注意这里protected不是指外界不能读和写point属性,而是指使mass-assignment对point属性失效,这样代码1就是安全的了。

在更新属性时,必须显式赋值


@user.point=params[:user][:point]
...


其他诸如sql注入等安全问题,可见

[url]http://manuals.rubyonrails.com/read/chapter/47[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值