私のpython Webアプリケーションのセキュリティ実装について考えています。 たとえば、私はユーザーとプロファイルを持っています。 各ユーザーは/ profile/user_idにPOSTを送信して自分のプロフィールを編集できますオブジェクトを変更するためのユーザーセキュリティを確認してください
私はセッションごとにuser_idを取得し、同じでない場合はprofile.user_idと比較できます。
しかし、私はまた、それを別のより一般的な方法を行うことができます。 各プロファイル
secret = hash(profile_data+secret_key)
のために生成し、認証のためにレンダリングします。このようなユーザーリンク:
/profile/4?key=secret
だから、アイデアは、編集可能なオブジェクトデータに基づいて秘密鍵を生成し、サーバ側でこのキーをチェックすることです。ユーザーが秘密鍵を知らない場合、他のプロファイルを編集するためのリンクが得られないため、変更することはできません。
この保護方法はどのように呼ばれますか? セッションベースのuser_idチェックでコンパイルに問題がありますか? ?
秘密の方法が動作する可能性のある他のユーザーのプロファイルをユーザーが変更できるようにするかどうかによって、いくつかのセキュリティ攻撃とそれらを防ぐ方法(タイミング攻撃など)に注意する必要があります。別の問題はUXです。ユーザーがプロファイルを編集して秘密鍵を変更すると、以前のすべてのURLが無効になり、煩雑になります。 また、それは単なる例であるかどうかわかりませんが、組み込みの 'hash'関数に注意してください。これは、暗号的には安全ではありません。 –
リンクのinvalidaionの問題は、IDのような永続的なデータに対してのみハッシュを生成することで解決できます。したがって、ハッシュ(id + secret)は、変更可能なデータを生成するのがより安全ですか? – Evg
私はちょうどプロが見えない、あなたは醜いURLを取得し、秘密が漏れた場合は、すべてのユーザーのURLを更新する必要があります。 –