1

データベース レコードを操作し、それらを HTML に表示し、ID を非表示フィールドに保存しているときに、更新するレコードが安全でないかどうかを確認するために、他のことを試しましたが、それで十分かどうかはわかりません。

現在、ID と ID + Somekey の md5 チェックサムを別の隠しフィールドに保存しています。

<input type="hidden" name="ID" value="1"/>
<input type="hidden" name="Hash" value="<?php echo md5($ID."MYKEY"); ?>"/>

そして、PHP im のバックエンドで同じことを行い、それらが等しいかどうかをテストします。

<?php
  $ID = $_GET['ID'];
  $Checksum = $_GET['Hash'];

  if(md5($ID."MYKEY") == $Checksum)
  //Proceed Delete or update
?> 

誰かがレコードの ID を変更して、他の誰かのレコードとやり取りできるからです。

2番目の解決策は、データベースからレコードを選択し、そのレコードがその特定のユーザーに存在するかどうかをテストすることで、そのレコードがユーザーに関連しているかどうかを確認することでしたが、チェックサムを使用して、最適化である可能性があると思いました!

チェックサムを使用し、新しいセッションごとに動的キーを生成することで、そのように使用するのに十分な安全性があります。

ベスト

4

2 に答える 2

3

サーバー側でユーザー権限を確認する必要があります。
チェックサムの問題は、ユーザーが ID だけでなくチェックサムも変更でき、チェックサムの生成に何を使用したかを推測できることです。したがって、セッションから現在のユーザーを取得し、ユーザーがデータベースからレコードを変更できるかどうかを取得し、許可されていない場合は拒否します。

最適化に関する限り、遅いことが判明した場合にのみ最適化する必要があります。

または、この問題に関する専門家を引用するには:

DonaldKnuth の論文「StructuredProgrammingWithGoToStatements」で、彼は次のように書いています。 . 約 97% の確率で小さな効率性を忘れる必要があります: 時期尚早の最適化はすべての悪の根源です. しかし、その重要な 3% で機会を逃してはなりません."

于 2012-06-15T08:17:41.390 に答える
1

抗CSRFメカニズムに似ていると思います。独自に作成したものではない、単純な CSRF 保護が必要な場合がありますか?

于 2012-06-15T08:16:32.260 に答える