有些安全问题在rails的开发中会被忽略的,比如rails在创建或者更新一个model的时候,支持一种mass-assignment的赋值方式,比如在controller中,创建一个user model记录
代码1:
这个场景通常发生在网站注册新用户,假如user有属性用户积分point,注册表单如是写:
如果有恶意用户更改了一下表单提交参数,增加point=10000,那么上述代码1就会存在安全漏洞,因为新注册用户可以获得任意积分!
要消除这个漏洞,做法是将point属性设置为protected
注意这里protected不是指外界不能读和写point属性,而是指使mass-assignment对point属性失效,这样代码1就是安全的了。
在更新属性时,必须显式赋值
其他诸如sql注入等安全问题,可见
[url]http://manuals.rubyonrails.com/read/chapter/47[/url]
代码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]