6

たとえば
、次のフォームがあると想像してください

  <%= form_for(@comment) do |f| %>

    <%= f.hidden_field :user_id%>
    <%= f.hidden_field :article_id%>

    <%= f.label :content %><br />
    <%= f.text_area :content %>

    <%= f.submit %>
  <% end %>

:user_id と :article_id の値を取得しました:

Comment.new(:user_id => current_user.id, :article_id => @article.id)

ブラウザでフォームを表示すると、次のようになります。

<form action="/comments" method="post">

  <input some_rails_tokens_here />

  <!-- THIS AREA HERE-->
  <input id="comment_user_id" name="comment[user_id]" type="hidden" value="1" />
  <input id="comment_article_id" name="comment[article_id]" type="hidden" value="1" />
  <!-- THIS AREA HERE-->

  <label for="comment_content">Content</label><br />
  <textarea id="comment_content" name="comment[content]"></textarea>

  <input type="submit" />
</form>

私の質問は、誰かが投稿パラメーターを変更し、 :user_id => 1 の値ではなく :user_id => 2 に変更された場合はどうなるかということです。記事と同じです。

Railsトークンで検証されていると信じたいのですが、よくわかりません。

4

4 に答える 4

7

フォーム内の非表示フィールドは、user から取得される他のデータよりも多かれ少なかれ安全です。つまり、単純に信頼するべきではありませユーザーからのものであり、操作や特殊な注入に対してオープンです。

データがサーバーに送り返されるとき、サーバーはそのデータを検証する必要があり、特定のユーザーが変更可能なコンテキストに基づいて操作が許可されているか無効であると想定しないでください。必要に応じて、ハッシュ チェックサムなどのアプローチを使用して、データが改ざんされていないという非常に高い信頼性を得ることができます (ただし、これは要求ごとにサーバーで検証する必要があります)。「セッション状態」を使用すると、データをユーザー操作の土地から遠ざけることで、問題を完全に軽減できます。

ハッピーコーディング。

于 2011-03-02T05:50:16.100 に答える
3

未登録ユーザーからのコメントが許可されている場合は、なぜuser_idについて気にする必要があります。コメントが登録ユーザーからのみ許可されている場合は、フォーム要素でuser_idを渡す代わりに、セッションを使用してユーザーを追跡します。

また、非表示のフィールドの使用が安全でない場合の質問に答えるには、適切な健全性チェックを行わないと、表示されているフィールドも安全ではありません。

于 2011-03-02T05:40:49.370 に答える
1

これらのフィールドの値が重要な場合は、ユーザーがそれらを変更せずに返すことを信頼しないでください。それ以外の場合、非表示フィールドは通常の表示フィールドよりも安全です。HTML にある場合は、誰かが変更できます。

于 2011-03-02T05:35:10.540 に答える
1

クライアントからサーバーに送信されるデータは、サーバー側のチェック (HTML フォームやブラウザー Cookie を含む) なしでは信頼できません。データは悪意を持って変更されたり、複数回送信されたりする可能性があります。

HTML フォームから製品価格を送信した e コマース サイトに関する話を読んだことがあります。安価なユーザーは、サーバーに送信する HTML フォーム データを編集して、製品価格を変更できます。

于 2011-03-02T05:47:09.630 に答える