rails已经为我们防范了大部分的漏洞攻击。但是更具危险的漏洞, 大部分都是由于开发人员的代码问题导致的,讲几个由于代码问题导致的漏洞。
1.eval(可执行字符串) eval很强大,也很危险.
基本用法 文档
1 2 3 4 5 6
| def get_binding(str) return binding end str = "hello" eval "str + ' Fred'" eval "str + ' Fred'", get_binding("bye")
|
Unsafe
1 2 3 4 5 6
| 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