Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
社会瑞弟呀
brakeman
提交
aa1ec3e7
B
brakeman
项目概览
社会瑞弟呀
/
brakeman
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
brakeman
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
aa1ec3e7
编写于
5月 06, 2013
作者:
J
Justin Collins
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'better_handling_of_nested_classes'
上级
708fec13
2170e57e
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
84 addition
and
30 deletion
+84
-30
lib/brakeman/processors/controller_alias_processor.rb
lib/brakeman/processors/controller_alias_processor.rb
+4
-10
lib/brakeman/processors/controller_processor.rb
lib/brakeman/processors/controller_processor.rb
+51
-18
lib/brakeman/processors/lib/processor_helper.rb
lib/brakeman/processors/lib/processor_helper.rb
+5
-1
test/apps/rails3/app/controllers/application_controller.rb
test/apps/rails3/app/controllers/application_controller.rb
+1
-0
test/apps/rails3/app/controllers/base_thing.rb
test/apps/rails3/app/controllers/base_thing.rb
+5
-0
test/apps/rails3/app/controllers/child_controller.rb
test/apps/rails3/app/controllers/child_controller.rb
+5
-0
test/apps/rails3/app/views/child/action_in_child.html.erb
test/apps/rails3/app/views/child/action_in_child.html.erb
+1
-0
test/tests/test_rails3.rb
test/tests/test_rails3.rb
+12
-1
未找到文件。
lib/brakeman/processors/controller_alias_processor.rb
浏览文件 @
aa1ec3e7
...
...
@@ -64,16 +64,9 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
end
end
#Processes a class which is probably a controller.
#(This method should be retired - only classes should ever be processed
# and @current_module will never be set, leading to inaccurate class names)
#Skip it, must be an inner class
def
process_class
exp
@current_class
=
class_name
(
exp
.
class_name
)
if
@current_module
@current_class
=
(
"
#@current_module
::
#@current_class
"
).
to_sym
end
process_default
exp
exp
end
#Processes a method definition, which may include
...
...
@@ -226,7 +219,8 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
while
controller
filters
=
get_before_filters
(
method
,
controller
)
+
filters
controller
=
@tracker
.
controllers
[
controller
[
:parent
]]
controller
=
@tracker
.
controllers
[
controller
[
:parent
]]
||
@tracker
.
libs
[
controller
[
:parent
]]
end
filters
...
...
lib/brakeman/processors/controller_processor.rb
浏览文件 @
aa1ec3e7
...
...
@@ -24,28 +24,66 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
def
process_class
exp
name
=
class_name
(
exp
.
class_name
)
if
not
name
.
to_s
.
match
(
/Controller$/
)
#Skip classes that are not controllers, but treat as a module because
#a class that is not a controller might contain a controller
return
process_module
exp
begin
parent
=
class_name
exp
.
parent_name
rescue
StandardError
=>
e
Brakeman
.
debug
e
parent
=
nil
end
if
@controller
Brakeman
.
debug
"[Notice] Skipping inner class:
#{
name
}
"
return
ignore
#If inside a real controller, treat any other classes as libraries.
#But if not inside a controller already, then the class may include
#a real controller, so we can't take this shortcut.
if
@controller
and
@controller
[
:name
].
to_s
.
end_with?
"Controller"
Brakeman
.
debug
"[Notice] Treating inner class as library:
#{
name
}
"
Brakeman
::
LibraryProcessor
.
new
(
@tracker
).
process_library
exp
,
@file_name
return
exp
end
if
not
name
.
to_s
.
end_with?
"Controller"
Brakeman
.
debug
"[Notice] Adding noncontroller as library:
#{
name
}
"
current_controller
=
@controller
#Set the class to be a module in order to get the right namespacing.
#Add class to libraries, in case it is needed later (e.g. it's used
#as a parent class for a controller.)
#However, still want to process it in this class, so have to set
#@controller to this not-really-a-controller thing.
process_module
exp
do
name
=
@current_module
if
@tracker
.
libs
[
name
.
to_sym
]
@controller
=
@tracker
.
libs
[
name
]
else
set_controller
name
,
parent
,
exp
@tracker
.
libs
[
name
.
to_sym
]
=
@controller
end
process_all
exp
.
body
end
@controller
=
current_controller
return
exp
end
if
@current_module
name
=
(
@current_module
.
to_s
+
"::"
+
name
.
to_s
).
to_sym
end
begin
parent
=
class_name
exp
.
parent_name
rescue
StandardError
=>
e
Brakeman
.
debug
e
parent
=
nil
end
set_controller
name
,
parent
,
exp
@tracker
.
controllers
[
@controller
[
:name
]]
=
@controller
exp
.
body
=
process_all!
exp
.
body
set_layout_name
@controller
=
nil
exp
end
def
set_controller
name
,
parent
,
exp
@controller
=
{
:name
=>
name
,
:parent
=>
parent
,
:includes
=>
[],
...
...
@@ -55,11 +93,6 @@ class Brakeman::ControllerProcessor < Brakeman::BaseProcessor
:options
=>
{
:before_filters
=>
[]},
:src
=>
exp
,
:file
=>
@file_name
}
@tracker
.
controllers
[
@controller
[
:name
]]
=
@controller
exp
.
body
=
process_all!
exp
.
body
set_layout_name
@controller
=
nil
exp
end
#Look for specific calls inside the controller
...
...
lib/brakeman/processors/lib/processor_helper.rb
浏览文件 @
aa1ec3e7
...
...
@@ -40,7 +40,11 @@ module Brakeman::ProcessorHelper
@current_module
=
module_name
end
process_all
exp
.
body
if
block_given?
yield
else
process_all
exp
.
body
end
@current_module
=
prev_module
...
...
test/apps/rails3/app/controllers/application_controller.rb
浏览文件 @
aa1ec3e7
class
ApplicationController
<
ActionController
::
Base
# protect_from_forgery
before_filter
:action_in_parent
,
:only
=>
:action_in_child
end
test/apps/rails3/app/controllers/base_thing.rb
0 → 100644
浏览文件 @
aa1ec3e7
class
BaseThing
<
ApplicationController
def
action_in_parent
@from_parent
=
params
[
:horrible_thing
]
end
end
test/apps/rails3/app/controllers/child_controller.rb
0 → 100644
浏览文件 @
aa1ec3e7
class
ChildController
<
BaseThing
def
action_in_child
#Should get @from_parent here
end
end
test/apps/rails3/app/views/child/action_in_child.html.erb
0 → 100644
浏览文件 @
aa1ec3e7
<%=
raw
@from_parent
%>
test/tests/test_rails3.rb
浏览文件 @
aa1ec3e7
...
...
@@ -14,7 +14,7 @@ class Rails3Tests < Test::Unit::TestCase
@expected
||=
{
:controller
=>
1
,
:model
=>
8
,
:template
=>
3
7
,
:template
=>
3
8
,
:warning
=>
54
}
...
...
@@ -848,6 +848,17 @@ class Rails3Tests < Test::Unit::TestCase
:file
=>
/so_nested\.html\.erb/
end
def
test_cross_site_scripting_from_parent
assert_warning
:type
=>
:template
,
:warning_code
=>
2
,
:fingerprint
=>
"1e860da2c9a0cac3d898f3c4327877b3bdfa391048a19bfd6f55d6e283cc5b33"
,
:warning_type
=>
"Cross Site Scripting"
,
:line
=>
1
,
:message
=>
/^Unescaped\ parameter\ value/
,
:confidence
=>
0
,
:relative_path
=>
"app/views/child/action_in_child.html.erb"
end
def
test_cross_site_scripting_select_tag_CVE_2012_3463
assert_warning
:type
=>
:template
,
:warning_type
=>
"Cross Site Scripting"
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录