0

だから私は投稿を編集するためのページを持っています。ユーザーが site.dev/post/edit/104 にアクセスして、データベースからその投稿のすべてのデータが入力されたフォームを取得するとします。

投稿 ID を隠しフィールドに保存するので、ページにある一部の ajax コンポーネントに簡単にアクセスできます。

これで、FireBug を開いて隠しフィールドの投稿 ID を変更するだけで問題ありません。悪意のあるユーザーが投稿 ID を変更し、データベース内のすべての投稿 ID をそのフォームに入力した内容で上書きする単純なスクリプトを作成するのを阻止するにはどうすればよいでしょうか?

確かに、ページにアクセスするにはユーザーを認証する必要があり、サーバー側で検証して、投稿 ID とその他のフィールドが許容値を保持していることを確認しますが、投稿 ID が整数である限り、更新されます。モール。これは、URL のクエリ文字列によって渡されるという問題がまだ残っていると思いますが、ページは少なくともすべてのコンテンツをロードします。

私はこれについて少し混乱しており、これよりも「安全な」代替案を今のところ思いつきません。これを防ぐ方法はありますか?

特に関連する提案がある場合は、Codeigniter を使用して構築しています。

4

3 に答える 3

2

変数をより安全にするために、CI の暗号化クラスを使用できます。構成ファイルに暗号化キーを設定し、コントローラーにライブラリをロードして、次のコードで ID を暗号化するだけです。

$id = 1;
$encrypted_id = $this->encrypt->encode($id);

したがって、URL を出力するときは、ID を整数として直接出力するのではなく、encrypted_id を出力します。ユーザーはこれが何を意味するのかわかりません。キーを持っていない限り、IDをデコードできません:D

エンコードされた ID を受け取ったら、暗号化クラスの decode() メソッドを使用してデコードできます。

詳細については、http: //codeigniter.com/user_guide/libraries/encryption.htmlをご覧ください。

于 2012-07-28T05:33:53.920 に答える
1

管理者ページについて話している場合、実際のセキュリティの問題はありません.管理者が投稿を変更したい場合は、とにかくそれを行うことができます.

ユーザーが自分の投稿を変更できるユーザーページの場合、最初に投稿したのが認証されたユーザーであるかどうかを簡単に確認できます。

コア原則; どのユーザーが要求を送信したかを常に確認する方法があり、残りは検証する受信スクリプト次第です。そのため、ユーザーが自分が誰であるかを正直に言うことを信頼することはできません (つまり、非表示の投稿フィールドにユーザー ID を保存することはできないため、リクエストに ajax を使用する場合はセッション ID などを使用してください)。 .

于 2012-07-27T21:58:52.903 に答える
0

一般に、ユーザー入力は信頼できません。ユーザーがサーバーに送信される内容を変更できないようにするメカニズムはありません。リクエストごとにすべてのデータを検証する必要があります。この場合、投稿 ID が有効であり、ユーザーがそれを編集する権限を持っていることを確認することを意味します。これらのチェックを実行する限り、ユーザーが手作りのリクエストを送信しても問題ありません。通常のサイトの使用ではできないことは何もないためです。

もちろん、特定のリクエストを送信したユーザーを特定する方法が必要であることを意味します。その目的でセッション ID を使用する場合は、ユーザーが別のユーザーに属する有効な ID を推測できないように、セッション ID がランダムに生成されていることを確認する必要があります。

于 2012-07-27T22:18:18.370 に答える