提交 edd0c6f3 编写于 作者: J Justin Collins

Fix checking for cookies as parameters

in method calls like <%= blah(cookies[:snickerdoodle]) %>
上级 f5f0a50d
...@@ -152,6 +152,8 @@ class CheckCrossSiteScripting < BaseCheck ...@@ -152,6 +152,8 @@ class CheckCrossSiteScripting < BaseCheck
message = "Unescaped model attribute" message = "Unescaped model attribute"
elsif @matched == :params elsif @matched == :params
message = "Unescaped parameter value" message = "Unescaped parameter value"
elsif @matched == :cookies
message = "Unescaped cookie value"
end end
if message and not duplicate? exp if message and not duplicate? exp
...@@ -199,8 +201,9 @@ class CheckCrossSiteScripting < BaseCheck ...@@ -199,8 +201,9 @@ class CheckCrossSiteScripting < BaseCheck
exp[0] = :ignore exp[0] = :ignore
@matched = false @matched = false
elsif sexp? exp[1] and model_name? exp[1][1] elsif sexp? exp[1] and model_name? exp[1][1]
@matched = :model @matched = :model
elsif cookies? exp or cookies? target or COOKIES == exp or COOKIES == target
@matched = :cookies
elsif @inspect_arguments and (ALL_PARAMETERS.include?(exp) or params? exp) elsif @inspect_arguments and (ALL_PARAMETERS.include?(exp) or params? exp)
@matched = :params @matched = :params
elsif @inspect_arguments elsif @inspect_arguments
......
<h1>Home#test_cookie</h1> <h1>Home#test_cookie</h1>
<p>Find me in app/views/home/test_cookie.html.erb</p> <p>Find me in app/views/home/test_cookie.html.erb</p>
Hello, cookie named <%= @name %>! Hello, cookie named <%= @name %>!
<%= indirect cookies[:oreo] %>
<h1>Home#test_cookie</h1> <h1>Home#test_cookie</h1>
<p>Find me in app/views/home/test_cookie.html.erb</p> <p>Find me in app/views/home/test_cookie.html.erb</p>
Hello, cookie named <%= raw @name %>! Hello, cookie named <%= raw @name %>!
<%= raw indirect(cookies[:chipsahoy]) %>
...@@ -385,6 +385,15 @@ class Rails2Tests < Test::Unit::TestCase ...@@ -385,6 +385,15 @@ class Rails2Tests < Test::Unit::TestCase
assert_equal 0, results.length, "escape_once is a safe method" assert_equal 0, results.length, "escape_once is a safe method"
end end
def test_indirect_cookie
assert_warning :type => :template,
:warning_type => "Cross Site Scripting",
:line => 5,
:message => /^Unescaped cookie value/,
:confidence => 2,
:file => /test_cookie\.html\.erb/
end
end end
class Rails3Tests < Test::Unit::TestCase class Rails3Tests < Test::Unit::TestCase
...@@ -716,4 +725,13 @@ class Rails3Tests < Test::Unit::TestCase ...@@ -716,4 +725,13 @@ class Rails3Tests < Test::Unit::TestCase
assert_equal 0, results.length, "escape_once is a safe method" assert_equal 0, results.length, "escape_once is a safe method"
end end
def test_indirect_cookie
assert_warning :type => :template,
:warning_type => "Cross Site Scripting",
:line => 4,
:message => /^Unescaped cookie value/,
:confidence => 2,
:file => /test_cookie\.html\.erb/
end
end end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册