Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
Brakeman
提交
49fd86c0
B
Brakeman
项目概览
李少辉-开发者
/
Brakeman
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
Brakeman
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
49fd86c0
编写于
2月 12, 2014
作者:
J
Justin
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #441 from presidentbeef/fix_haml_template_processing
Fix HAML template processing
上级
9146de53
750ea2da
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
88 addition
and
9 deletion
+88
-9
lib/brakeman/processors/haml_template_processor.rb
lib/brakeman/processors/haml_template_processor.rb
+50
-3
test/apps/rails2/app/controllers/other_controller.rb
test/apps/rails2/app/controllers/other_controller.rb
+4
-0
test/apps/rails2/app/views/other/test_haml_stuff.html.haml
test/apps/rails2/app/views/other/test_haml_stuff.html.haml
+4
-0
test/tests/rails2.rb
test/tests/rails2.rb
+28
-4
test/tests/tabs_output.rb
test/tests/tabs_output.rb
+2
-2
未找到文件。
lib/brakeman/processors/haml_template_processor.rb
浏览文件 @
49fd86c0
...
...
@@ -3,6 +3,7 @@ require 'brakeman/processors/template_processor'
#Processes HAML templates.
class
Brakeman::HamlTemplateProcessor
<
Brakeman
::
TemplateProcessor
HAML_FORMAT_METHOD
=
/format_script_(true|false)_(true|false)_(true|false)_(true|false)_(true|false)_(true|false)_(true|false)/
HAML_HELPERS
=
s
(
:colon2
,
s
(
:const
,
:Haml
),
:Helpers
)
#Processes call, looking for template output
def
process_call
exp
...
...
@@ -37,9 +38,7 @@ class Brakeman::HamlTemplateProcessor < Brakeman::TemplateProcessor
else
case
method
.
to_s
when
"push_text"
s
=
Sexp
.
new
(
:output
,
out
)
@current_template
[
:outputs
]
<<
s
s
build_output_from_push_text
(
out
)
when
HAML_FORMAT_METHOD
if
$4
==
"true"
Sexp
.
new
:format_escaped
,
out
...
...
@@ -117,4 +116,52 @@ class Brakeman::HamlTemplateProcessor < Brakeman::TemplateProcessor
exp
.
target
.
value
==
:_hamlout
and
exp
.
method
==
:buffer
end
#HAML likes to put interpolated values into _hamlout.push_text
#but we want to handle those individually
def
build_output_from_push_text
exp
if
node_type?
exp
,
:string_interp
,
:dstr
exp
.
map!
do
|
e
|
if
sexp?
e
if
node_type?
e
,
:string_eval
,
:evstr
e
=
e
.
value
end
get_pushed_value
e
else
e
end
end
end
end
#Gets outputs from values interpolated into _hamlout.push_text
def
get_pushed_value
exp
return
exp
unless
sexp?
exp
case
exp
.
node_type
when
:format
exp
.
node_type
=
:output
@current_template
[
:outputs
]
<<
exp
exp
when
:format_escaped
exp
.
node_type
=
:escaped_output
@current_template
[
:outputs
]
<<
exp
exp
when
:str
,
:ignore
,
:output
,
:escaped_output
exp
when
:block
,
:rlist
,
:string_interp
,
:dstr
exp
.
map!
{
|
e
|
get_pushed_value
e
}
else
if
call?
exp
and
exp
.
target
==
HAML_HELPERS
and
exp
.
method
==
:html_escape
s
=
Sexp
.
new
(
:escaped_output
,
exp
.
first_arg
)
else
s
=
Sexp
.
new
(
:output
,
exp
)
end
s
.
line
(
exp
.
line
)
@current_template
[
:outputs
]
<<
s
s
end
end
end
test/apps/rails2/app/controllers/other_controller.rb
浏览文件 @
49fd86c0
...
...
@@ -65,4 +65,8 @@ class OtherController < ApplicationController
render
:xss_dupes
,
:layout
=>
'thing'
end
def
test_haml_stuff
render
:locals
=>
{
:user
=>
User
.
first
}
end
end
test/apps/rails2/app/views/other/test_haml_stuff.html.haml
0 → 100644
浏览文件 @
49fd86c0
%tr
%td
=
user
.
age
.
to_i
%td
=
user
.
stuff
%td
=
user
.
status
test/tests/rails2.rb
浏览文件 @
49fd86c0
...
...
@@ -11,13 +11,13 @@ class Rails2Tests < Test::Unit::TestCase
@expected
||=
{
:controller
=>
1
,
:model
=>
3
,
:template
=>
4
5
,
:template
=>
4
7
,
:generic
=>
49
}
else
@expected
||=
{
:controller
=>
1
,
:model
=>
3
,
:template
=>
4
5
,
:template
=>
4
7
,
:generic
=>
50
}
end
end
...
...
@@ -1119,6 +1119,30 @@ class Rails2Tests < Test::Unit::TestCase
:relative_path
=>
"app/views/layouts/thing.html.erb"
end
def
test_cross_site_scripting_in_haml
assert_warning
:type
=>
:template
,
:warning_code
=>
2
,
:fingerprint
=>
"702f9bae476402bb2614794276083849342540bd8b5e8f2fc35b15b40e9f34fc"
,
:warning_type
=>
"Cross Site Scripting"
,
:line
=>
3
,
:message
=>
/^Unescaped\ model\ attribute/
,
:confidence
=>
0
,
:relative_path
=>
"app/views/other/test_haml_stuff.html.haml"
,
:user_input
=>
nil
end
def
test_cross_site_scripting_in_haml2
assert_warning
:type
=>
:template
,
:warning_code
=>
2
,
:fingerprint
=>
"79cbc87a06ad9247362be97ba4b6cc12b9619fd0f68d468b81cbed376bfbcc5c"
,
:warning_type
=>
"Cross Site Scripting"
,
:line
=>
4
,
:message
=>
/^Unescaped\ model\ attribute/
,
:confidence
=>
0
,
:relative_path
=>
"app/views/other/test_haml_stuff.html.haml"
,
:user_input
=>
nil
end
def
test_dangerous_send_try
assert_warning
:type
=>
:warning
,
:warning_type
=>
"Dangerous Send"
,
...
...
@@ -1287,13 +1311,13 @@ class Rails2WithOptionsTests < Test::Unit::TestCase
@expected
||=
{
:controller
=>
1
,
:model
=>
4
,
:template
=>
4
5
,
:template
=>
4
7
,
:generic
=>
49
}
else
@expected
||=
{
:controller
=>
1
,
:model
=>
4
,
:template
=>
4
5
,
:template
=>
4
7
,
:generic
=>
50
}
end
end
...
...
test/tests/tabs_output.rb
浏览文件 @
49fd86c0
...
...
@@ -3,9 +3,9 @@ class TestTabsOutput < Test::Unit::TestCase
def
test_reported_warnings
if
Brakeman
::
Scanner
::
RUBY_1_9
assert_equal
99
,
Report
.
lines
.
to_a
.
count
assert_equal
101
,
Report
.
lines
.
to_a
.
count
else
assert_equal
10
0
,
Report
.
lines
.
to_a
.
count
assert_equal
10
2
,
Report
.
lines
.
to_a
.
count
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录