0

これは、posts/index.html.erb ファイルのコードです。

<!--
  Iterate over each post in list format
-->
  <% @posts.each do |post| %>       
    <ul class="posts">
    <!--
      Link to article, display date created, show edit, delete links if logged in
    -->
    <li><%= link_to "#{post.title}".html_safe, post, id: "article" %></li>
    <li id="date">  <%= post.created_at.strftime("%B %Y") %></li>

    <% if logged_in? %>
      <li>
        <%= link_to 'Edit', "/editor" + post_path(post), id: "edit_delete", data: {save_url: mercury_update_post_path(post)}  %>
        <%= link_to 'Delete', post, id: "edit_delete", :method => :delete %>    
      </li>
    <% end %>
  </ul>
<% end %>

私のローカルの開発および運用環境では、関連付けられた css スタイルシートと html はブラウザーで適切にコンパイルおよびレンダリングされます。しかし、このコードを heroku にデプロイすると、ページのソース コードに見られるように、以前に削除した古い HTML が追加されます。

    <!--
    Iterate over each post in list format
-->
            <ul class="posts">
                <!--
                    Link to article, display date created
                -->
                <li>    <a href="/posts/5" id="article"><b>Endurance Exercise is Bad for your Health?</b>
<div><b><br></b></div></a>  </li>
                <li id="date">  February 2013                                   </li>

                    <!--
                        Show edit, delete links if logged in
                    -->
            </ul>

<div><b><br></b></div>記事「持久運動は体に悪い?」のリンクタグ内に埋め込まれたタグを参照してください。...本番環境でherokuにデプロイされたときに、なぜそこに配置されているのか知っている人はいますか?

4

1 に答える 1

1

これはあなたの犯人です。 "#{post.title}".html_safe

表示している投稿の 1 つに、タイトルに html タグが含まれています。.html_safeユーザーが入力したものを呼び出すのは悪い考えです。h(post.title)受け入れられたタグの文字列を使用してエスケープするか、最初にサニタイズする必要があります。サニタイズヘルパーを見てください

于 2013-02-26T00:00:59.157 に答える