0

これが私のコードの要約です:

私の Web サイトは基本的に、特定のテーブルのすべての行のコンテンツをループするだけです。ただし、場合によっては、特定の行から個別の ID を取得する必要があります。非表示の入力は機能しますが、セキュリティ上大きな負担になることはわかっています。非表示の入力から ID を取得したら、それを別のテーブルに挿入する必要があります。ハッカーは、隠された入力の値を単純に変更して、システムにハッキングすることができます。サーバー側でそれを検証する方法が見つかりません。暗号化は役立つかもしれませんが、ハッカーは暗号化を解読する方法をいつでも見つけることができると思います。これをより安全にする方法について誰か考えがありますか?

更新: 私のウェブサイトの内容が少し曖昧で申し訳ありません。基本的にはFacebookのような好き嫌いのシステムです。私のテーブルには、id、user_that_liked_id、post_id の構造があります。ユーザーが投稿を気に入ると、その投稿の ID が post_id に挿入され、その投稿を気に入ったユーザーの ID が user_that_liked_id に挿入されます。ユーザーは隠し入力の ID を変更するだけで、あらゆる種類のナンセンスを挿入できるため、ここにはセキュリティ上の問題があります。以下のコードを参照してください。

HTML (概要):

<div class="thumbsup mini_thumbs" name="mini_thumbs">


<input type="hidden" value="<?php echo $row->id; ?>" id="post_id"/>


<input class="up" name="thumbsup_vote" type="submit" value="1" title="Vote up" onclick = "liked(this)"  />


<input class="down" name="thumbsup_vote" type="submit" value="0" title="Vote down" onclick = "disliked(this)" />
</div>

JavaScript/jQuery (まとめ)

function liked(e) {
var post_id = $(e).siblings("#post_id").val();
alert(post_id);
}
4

2 に答える 2

1

クライアントに渡すと、ユーザーはそれを変更できます。

クライアントにそれを渡さざるを得ない場合は、フォームが送信されたときに、ユーザーが認証されているかどうか(つまり、パスワードを入力したなどの理由で、そのユーザーが誰であるかを知っているかどうか) および承認されているかどうか(つまり、彼らは、要求が求めていることは何でもすることができます)。

承認を決定する方法は、ビジネス ルールに完全に依存します (これについては説明していません)。これらは次のようなものです。

IF the id belongs to an entry created by the user
OR IF the user is an admin

これには、明らかに、どのユーザーがどのエントリを作成したか、またはどのユーザーが管理者であったかを記録する必要があります。

ユーザーは隠し入力の ID を変更するだけで、あらゆる種類のナンセンスを挿入できるため、ここにはセキュリティ上の問題があります。

私が想像できる唯一のナンセンスは、投稿を複数回いいねするか、ユーザーが見ることができない投稿をいいねすることです。これは承認に戻ります。リクエストが重複している場合、またはユーザーが投票しようとしている投稿を表示することが許可されていない場合は、リクエストを拒否します。

于 2013-06-08T09:17:00.857 に答える
0

サーバー側で適切な認証と検証が行われていると仮定すると、HTML に ID 値を表示しても問題ありません。

たとえば、あなたのコードはブログなどの投稿を更新するためのものだと思いますか? ユーザーは更新時にログインする必要がありますか? 現在ログインしているユーザーがその特定の投稿を更新する権限を持っていることを確認しますか (つまり、ユーザーが属するユーザーグループに投稿を編集する権限があるか、すべての投稿を編集する権限があるか、または投稿の作成者がログインしているユーザーであることを確認します)。 )。

レコード ID をセッションに保存してユーザーから隠すことはできますが、ハッカーはセッション ハイジャックを試みる可能性があります。

バックエンドのセキュリティがすべてです。

于 2013-06-08T09:18:36.077 に答える