Merge pull request #3541 from evazion/fix-3539

Fix #3539: Open redirect vulnerabilities
This commit is contained in:
Albert Yi
2018-03-08 16:02:02 -08:00
committed by GitHub
4 changed files with 37 additions and 17 deletions

View File

@@ -4,11 +4,11 @@ module PaginationHelper
if records.any?
if params[:page] =~ /[ab]/ && !records.is_first_page?
html << '<li>' + link_to("< Previous", params.merge(:page => "a#{records[0].id}"), :rel => "prev") + '</li>'
html << '<li>' + link_to("< Previous", nav_params_for("a#{records[0].id}"), :rel => "prev") + '</li>'
end
unless records.is_last_page?
html << '<li>' + link_to("Next >", params.merge(:page => "b#{records[-1].id}"), :rel => "next") + '</li>'
html << '<li>' + link_to("Next >", nav_params_for("b#{records[-1].id}"), :rel => "next") + '</li>'
end
end
@@ -29,7 +29,7 @@ module PaginationHelper
window = 4
if records.current_page >= 2
html << "<li class='arrow'>" + link_to("<<", params.merge(:page => records.current_page - 1), :rel => "prev") + "</li>"
html << "<li class='arrow'>" + link_to("<<", nav_params_for(records.current_page - 1), :rel => "prev") + "</li>"
else
html << "<li class='arrow'><span>" + "&lt;&lt;" + "</span></li>"
end
@@ -69,7 +69,7 @@ module PaginationHelper
end
if records.current_page < records.total_pages && records.size > 0
html << "<li class='arrow'>" + link_to(">>", params.merge(:page => records.current_page + 1), :rel => "next") + "</li>"
html << "<li class='arrow'>" + link_to(">>", nav_params_for(records.current_page + 1), :rel => "next") + "</li>"
else
html << "<li class='arrow'><span>" + "&gt;&gt;" + "</span></li>"
end
@@ -100,9 +100,16 @@ module PaginationHelper
html << "</li>"
else
html << "<li class='numbered-page'>"
html << link_to(page, params.merge(:page => page))
html << link_to(page, nav_params_for(page))
html << "</li>"
end
html.join.html_safe
end
private
def nav_params_for(page)
query_params = params.except(:controller, :action, :id).merge(page: page).permit!
{ params: query_params }
end
end

View File

@@ -5,17 +5,13 @@ module PostsHelper
def next_page_url
current_page = (params[:page] || 1).to_i
dup_params = params.dup
dup_params[:page] = current_page + 1
url_for(dup_params).html_safe
url_for(nav_params_for(current_page + 1)).html_safe
end
def prev_page_url
current_page = (params[:page] || 1).to_i
if current_page >= 2
dup_params = params.dup
dup_params[:page] = current_page - 1
url_for(dup_params).html_safe
url_for(nav_params_for(current_page - 1)).html_safe
else
nil
end
@@ -135,4 +131,11 @@ module PostsHelper
html.html_safe
end
private
def nav_params_for(page)
query_params = params.except(:controller, :action, :id).merge(page: page).permit!
{ params: query_params }
end
end