シナリオ:サーバー側でエンコードされたJSONを使用してJavaScriptで生成されたタスクリストがあります。 todoアイテムIDをHTML id属性に入れました。したがって、プロセスは次のようになります。
次に、特定のタスク項目を編集して更新する必要があります。これは次のように行われます:
INSERT.PHP
ページに渡します。INSERT.PHP
ページで、JSONをデシリアライズしてデータベースで更新できるようにします。Problem:ユーザーがブラウザの開発者コンソールを使用してTo-DoアイテムIDを変更できるため、HTML ID属性にTo-DoアイテムIDを入力すると、システムに問題が発生します。
質問:安全な方法はありますか?私はそれを間違っているのですか、それともこれは普通のことですか?
質問の詳細のほとんどは無関係です。 IDがHTML id属性に格納されていること、開発者ツール、jQueryを使用していること...それは本当に重要ではありません。
重要なのは、サーバーにinsert.php
というエンドポイントがあることだけです。攻撃者は、クライアントコードがどのようなものであっても、エンドポイントに攻撃者が望む任意の要求を送信できます。許可されていないことを実行しようとする人々に対する保護は、クライアントではなくサーバーで行う必要があります。
PHPコードを見てください。入力が期待した形式であることを確認していますか?ユーザーが特定のタスクリストを編集する権限を持っているかどうかを確認していますか?そうでない場合は修正してください。また、セキュリティの値を得るには、検証と承認のチェックをサーバーで実行する必要があることに注意してください。
具体的には、ユーザーが自分が所有するToDoの編集のみを許可する必要がある場合は、insert.php
で以下を実行する必要があります。
AJAX説明した関連事項は重要ではありません。クライアント(ブラウザ)を信頼してはならず、insert.phpスクリプトで情報を検証する必要があります。
何を検証するかを検討する必要があります。ToDoリストの場合は、送信したID、変更などの関連する権限があることを確認してください。誰かが手動でinsert.phpスクリプトにリクエストを送信する場合、それが必要とするものすべてに対応する必要があります(つまり、自分に属しているかどうか、/それを編集するためのアクセス許可を持っているかどうか、ToDoリストアイテムかどうか)ロックされているなど)。
クライアント/ブラウザが送信するデータを信頼して、サーバーサイドですべてを検証することは絶対に避けてください。 JSONオブジェクトを挿入するだけのように見えるinsert.phpスクリプトではなく、検討することもできます。検証せずにJSONオブジェクトを挿入するだけでなく、AJAXリクエスト用のAPIを作成できます。それについて何か。