1

ユーザーが自分のアカウントに登録してアクセスできる Web サイトを開発しています。ユーザーが接続すると、シリアル化と base64 エンコーディングを使用して User オブジェクトを Cookie に保存します。それは完全に機能していましたが、突然 PHP スクリプトが Cookie を作成しなくなりました。私のPHPスクリプトは次のとおりです。

/**
 * Function that creates a cookie from an User object
 * @param User $user User object to be stored in the cookie
 * @param int $timeout Lifetime of the cookie (0 if should be destroyed when the navigator is closed)
 */
function setUserCookie($user, $timeout = COOKIE_MAXLIFETIME) {
    setcookie('user', base64_encode(serialize($user)), $timeout, '/');
}

問題がどこから来ているのかわかりません。誰かが私を助けてくれることを願っています:)

編集 : これは大学向けのプロジェクトです。Cookie にオブジェクトを保存しているときに Web サイトが脆弱になる可能性があることは承知していますが、Web サイトのセキュリティよりも機能に重点を置く必要があります。

4

2 に答える 2

2

シリアル化された文字列を、外の世界が見て操作できるものに保存しないでください! セキュリティホールです!なんで?

シリアル化された文字列には、オブジェクトの作成に使用されたクラスの名前が含まれています。これは変更できます。任意の文字列のシリアル化を解除すると、任意のオブジェクトが作成されます。このオブジェクト コードが利用可能な場合は、実行されます。外部の攻撃者は、実行するコードをある程度選択できるため、これは基本的にリモートでコードが実行される脆弱性です。

本当にデータを Cookie に保存したい場合は、データのみを含み、PHP オブジェクトへの参照を含まないシリアライゼーション形式を使用してください。json_encode()正しいことかもしれません。より良い方法は、セッションを使用して、現在のログイン サーバー側に関連するものをすべて保存することです。

于 2013-06-30T17:09:01.527 に答える