Webクローラーにこのページの表示を許可した場合、各ページの各削除リンクをクロールすると、データベース全体を削除できませんでしたか?
はい。
delete()を呼び出すページをどういうわけか理解した人は、$ _ GETに必要な番号を含むURLを手動でロードし、レコードを削除できませんでしたか?
はい。
CRUDを介して何も削除せずに、テーブルにDeleted列を追加して、ユーザーには削除されたように見せたほうがよいでしょうか。
実際に削除したい場合は、imo、削除する方が良いです。
私はただの妄想ですか?
全くない。
次のようなdelete.phpスクリプトがある場合(CRUD atmを無視し、MySQLについて話します):
$q = "DELETE FROM mytable WHERE row = $_GET['id']";
$r = mysql_query($q);
そうです、最初の2つの懸念は、実際に何が起こるかということです。これらのリンクに遭遇したスパイダーはDBレコードを削除し、リンクを発見した悪意のあるユーザーが同様にDBから行を削除する可能性があります。
これは通常、2つの方法で処理されます。
delete.phpリンクを持ってはいけない人(ログインしていない人、管理者としてログインしていない人など)にdelete.phpリンクを提供しないでください。ただし、これは単なる便利な機能であり、そうではないことに注意してください。偶発的/悪意のある削除からDBを保護します。
delete.phpスクリプトで、スクリプトを実行している人が行を削除できることを確認します。ほとんどの場合、ログイン時に設定されたセッション変数をチェックすることによって行われます(例if($_SESSION['can_delete'] != true){ die('Insufficient Privileges'); }
)。
delete.phpリンクを持ってはいけない人に提供しないことは役に立ちますが、安全にしたい場合は、delete.phpスクリプトでアクセス許可を明示的に確認する必要があります。