• ベストアンサー

PHPSESSIDについて

phpでSmartyを使用して携帯サイトを作成してます。 画面間のセッションの引渡しで サーバサイドでSID(セッションID)を 変数$session_idに格納し、クライアントサイドで 下記のようにformタグのactionを指定してsubmitした場合、$session_idにスクリプトを埋め込まれて実行されてしまう可能性は あるのでしょうか。 $session_idにhtmlspecialchars()をかけるべきなのでしょうか。 <form name="form" method="post" action="index.php?{$session_id}"> ・・・ <input type="submit" value="次へ"> 初歩的な質問ですいませんが、詳しい方がいらっしゃいましたら よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KanjistX
  • ベストアンサー率55% (48/86)
回答No.1

htmlspecialchars()を使いましょう。 ブラウザでhttp://xxx.xxx.xxx/xxx.php?PHPSESSID="><script>alert()</script>にアクセスされると <form name="form" method="post" action="index.php?"><script>alert()</script> というふうに簡単にスクリプトを埋め込まれます。 参考URLの 2.クロスサイトスプリクティング  e.クロスサイトスクリプティング対策に strip_tags() を使用するときの注意 7.HP でセッション変数、Cookie を使用する際のセキュリティ対策について  g. セッション関連の処理で注意すべきクロスサイトスクリプティング問題 をご覧下さい。

参考URL:
http://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html
negisei
質問者

お礼

ご回答ありがとうございます。 確かにおっしゃられた通り、スクリプトが実行可能でした。 とても助かりました。 セキュリティのページもいろいろと参考になりました。

その他の回答 (1)

回答No.2

ANo1さんご指摘のように、PHPではセッションID文字列をクライアントが決定できる問題があります(permissiveなセッション管理と呼ばれています。詳しくは、参考URLを見てください)。従って、セッションIDに、"<>&などを含む任意の文字が含まれる可能性があります。 今回の例、 <form name="form" method="post" action="index.php?{$session_id}"> では、セッションIDがクエリストリングになっているため、構文的にはhtmlspecialcharsではなく、urlencode(に加えてhtmlspecialchars)をすべき場面です。

参考URL:
http://blog.ohgaki.net/index.php/yohgaki/2005/12/24/strict_sessioncric
negisei
質問者

お礼

ご回答ありがとうございます。 セキュリティ対策は奥が深いですね。 学ばなければいけないことが多いです。