rails安全问题

rails已经为我们防范了大部分的漏洞攻击。但是更具危险的漏洞, 大部分都是由于开发人员的代码问题导致的,讲几个由于代码问题导致的漏洞。

1.eval(可执行字符串) eval很强大,也很危险.

基本用法 文档

1
2
3
4
5
6
def get_binding(str)
return binding
end
str = "hello"
eval "str + ' Fred'" #=> "hello Fred"
eval "str + ' Fred'", get_binding("bye") #=> "bye Fred"

Unsafe

1
2
3
4
5
6
# xxx_controller.rb
def test_eavl
datas = (eval params[:model_name]).limit(10)
render :jons => datas
end

如果传参model_name = “rm -rf /“,后果是不可想像的

2.send同eval

Unsafe use of method:

1
2
method = params[:method]
@result = User.send(method.to_sym)

Safe:

1
2
method = params[:method] == 1 ? :method_a : :method_b
@result = User.send(method, *args)

3.send_file

Unsafe use of method: (/../../../)

1
2
3
4
old_url = params[:old_url]
r_path = "#{Rails.root}/public/uploads/"
file_url = r_path + old_url
send_file(r_path + old_url, :filename => file_name)

4.params[:user].permit!

5.redirect_to

Unsafe use of method:

1
redirect_to params[:back] #慎用

依赖于用户提供的值重定向可用于“欺骗”网站或隐藏其他无害的URL中的恶意链接。如果未验证目的地,他们还可以允许访问站点的受限区域。

Safe:

1
redirect_to URI.parse(params[:back]).request_uri

rails扫描工具

brakeman