PHPのセッション変数は、Cookieよりはるかに安全です。
しかし悪意あるユーザが、何らかの方法でセッション変数を読む事態は考えられます。
その場合、悪意あるユーザがすべてのセッション変数にアクセスできるようになってしまいます。
これを予防する策としては、
・毎回IPアドレスをチェックする
・ノンスを使用する
があります。
IPアドレスのチェックはしないよりずっとよいですが、これだけでは危険です。
ノンスはその生成されたページごとにランダムな文字列(トークン)を埋め込むもので、この文字列によってたとえば、その直前のページからPOSTされたかどうかが判別できます。
ただし、いずれの手段にせよユーザビリティは大きく損なわれます。
IPアドレスのチェックは、ユーザの接続環境が安定していなかったり、ファイアウォール越しにアクセスしている場合は、IPアドレスが変わるたびに何度も認証しなければなりません。
ノンスは、ユーザがブラウザの「戻る」ボタンを使っただけでエラーになってしまう場合があります。
Cookieは比較的簡単なXSS(クロスサイトスクリプティング)でセッションを盗聴できます。
ユーザのセッションIDをCookieに登録すると、それらも危険に晒されることになります。
考えられる攻撃は想定したうえで認証システムを作る必要があります。
なお、CookieとAjaxを同時に使わないように注意してください。
CookieとAjaxを同時に使用すると、Cookieが偽装されても、Ajax側で毎回セキュリティチェックを行うことができないためです。
Cookieが認証システムに使用されていると、盗聴したCookieやAjaxのセキュリティホール両方での攻撃が可能になる場合があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。