Skip to content

Commit 1cd92fa

Browse files
committed
fix: dojoビューのXSS脆弱性を解消
- html_escape() でユーザー入力データを適切にエスケープ - sanitize_url() でリンク先URLを安全化 - link_to に noreferrer を追加し Reverse Tabnabbing 対策
1 parent faf751b commit 1cd92fa

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

app/views/shared/_dojo.html.erb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
<li class="dojo" id="<%= dojo.name %>">
1+
<li class="dojo" id="<%= html_escape(dojo.name) %>">
22
<header>
3-
<%= link_to lazy_image_tag(dojo.logo, alt: "CoderDojo #{dojo.name}", class: 'dojo-picture'), dojo.safe_url,
4-
target: "_blank", rel: "external noopener" %>
3+
<%= link_to lazy_image_tag(dojo.logo, alt: html_escape("CoderDojo #{dojo.name}"), class: 'dojo-picture'), sanitize_url(dojo.safe_url),
4+
target: "_blank", rel: "external noopener noreferrer" %>
55
<span class="dojo-name">
6-
<%= link_to "#{dojo.name} (#{dojo.prefecture.name})", dojo.safe_url, target: "_blank", rel: "external noopener" %>
6+
<%= link_to html_escape("#{dojo.name} (#{dojo.prefecture.name})"), sanitize_url(dojo.safe_url), target: "_blank", rel: "external noopener noreferrer" %>
77
<% if not dojo.counter == 1 %>
88
<span class="dojo-counter"
99
data-original-title="道場数"
@@ -15,7 +15,7 @@
1515

1616
<ul class="tags">
1717
<% dojo.tags.first(5).each do |tag| %>
18-
<li><%= tag %></li>
18+
<li><%= html_escape(tag) %></li>
1919
<% end %>
2020

2121
<% if dojo.tags.length > 5 %>
@@ -26,12 +26,12 @@
2626
<div class="tooltip-arrow"></div>
2727
<div class="tooltip-inner"></div>
2828
</div>'
29-
title="<%= dojo.tags[5..].join(', ') %>">...</li>
29+
title="<%= html_escape(dojo.tags[5..].join(', ')) %>">...</li>
3030
<% end %>
3131
</ul>
3232

3333
<p class="dojo-description">
34-
<%= dojo.description %>
34+
<%= html_escape(dojo.description) %>
3535
<% if dojo.is_private %>
3636
<%= link_to 'Private', doc_path('private-dojo'), class: 'dojo-private' %>
3737
<% end %>

0 commit comments

Comments
 (0)