0

だから私はcodeigniterを使っていて、コメントを送信するためのフォームを作りました。

echo form_open(current_url()); // http://localhost/post/26
$textarea = array(
    'id' => 'comment_area',
    'name' => 'comment',
    'value' => set_value('comment'),
    'cols' => 35,
    'rows' => 5
);
echo form_textarea($textarea);
echo '<br />';
    echo form_submit('submit', 'Comment');
echo form_close();

したがって、これがどのように生成されるかを推測する方法は次のとおりです。<form action="http://localhost/post/26" method="post" accept-charset="utf-8">

しかし、問題があります。firebug アクション ID を使用して手動で 25 に変更すると、次のようになります。

<form action="http://localhost/post/25" method="post" accept-charset="utf-8">

そして送信 -> 26番目ではなく25番目の投稿にコメントを送信します...では、このようにフォームタグをsmthから守るにはどうすればよいですか?

4

2 に答える 2

1

私があなたの質問を正しく理解していれば、そのようなことを気にしないでください。彼らが許可を持っている場合は、彼らにそれをさせてください。

これを実行したくない理由 (シナリオ) を少し説明します。

あなたが提供したものから、生成されたキーが30であるため、次のような形式になるとしましょう

< form action="http://localhost/post/30" method="post" accept-charset="utf-8">

31 になる別の投稿を作成すると、次のようなフォームも作成されます。

< form action="http://localhost/post/31" method="post" accept-charset="utf-8">

ここで、私が 30 番目の投稿を読みに来たユーザーであると仮定すると、次のリンクをクリックします。

localhost/post/30 (もちろん http)

31 番目の投稿である別の投稿を読むように提案された場合は、次のリンクをクリックします。

ローカルホスト/ポスト/31

より知識のあるユーザーが 30 番目の投稿にいて、30 を 31 に変更することにした場合はどうなるでしょうか? 提供されたリンクをクリックしたか、値を変更したかどうかをどのように知ることができますか? (私が聞いたところによると、HTTP リファラーは回避できます)。

私が言えることは、彼らがその特定の投稿に投稿する許可を持っているかどうかを確認することだけです。スタックオーバーフローも同じことをしていると思います。投稿が存在し、ユーザーがその投稿にコメントを投稿する権限を持っているかどうかを確認してください。ハッカーになろうとして、ある投稿から別の投稿にコメントを送信することを心配しないでください。それはハッキングではなく、ふざけています。

編集: 許可があり、投稿が存在する場合、セキュリティの問題でさえない何かのために多くの作業を行います。許可(少し複雑になる可能性があります)と投稿の存在を確認するだけです。

于 2013-09-15T09:45:44.420 に答える
0

これはサーバー側の問題です。コードがこの方法でサーバーに投稿されないようにする必要があります。これにはおそらく HTTP Post メソッドを使用できます。もう 1 つの方法は、投稿 ID を何らかの方法で暗号化するか、アクセスが必要になるたびに各投稿に一意の ID を生成して一時的に使用することです。

于 2013-09-15T09:47:10.963 に答える