PHP Session Fixation / Hijackingなどのスレッドや、Chris Shiflett などの一部の人々は$_SESSION['HTTP_USER_AGENT']
、セッションの有効性を確認するためにユーザー エージェント ( ) を確認することを推奨しています。一部のリソースでは、次のようなことを推奨しています。
<?php
$string = $_SERVER['HTTP_USER_AGENT'];
$string .= 'SHIFLETT';
/* Add any other data that is consistent */
$fingerprint = md5($string);
?>
しかし、Chris Snyder氏は、「ブラウザー エージェントの世界は、ユーザーの世界に比べて非常に小さいため、各ユーザーが個別のユーザー エージェントを持つことは不可能です。さらに、ユーザー エージェントを偽装することは難しくありません」と述べています。したがって、セッションの有効性の証明としてこのメトリックをチェックすることにはほとんど意味がありません」(第 7 章、103 ページ)。
矛盾するアドバイスに遭遇したとき、また、アドバイスの一部が古くなっている可能性がある場合 (上記の Shiflett/PHPSec の例のように、タイムスタンプが 2005 年 3 月 18 日金曜日のようです) に何をすべきかを知ることは非常に困難です。Snyder の (発行日: 2010 年 12 月 9 日) などの新しいアドバイスの方が優れているように見えますが、これは常にそうなのでしょうか? (たとえば、 の使用を推奨するのに多くの時間を費やしているにもかかわらずmysqli
、Snyder は、Stack Overflow ユーザーがより良い選択であることに同意しているように見えることを完全に無視していますPDO
。 .
したがって、私の質問には 2 つの部分があると思います。1 つは具体的な部分 (ユーザー エージェントを調査する必要がありますか?) であり、もう 1 つは一般的な部分 (PHP セキュリティの最新の考え方については、誰のアドバイスを信頼すべきでしょうか?) です。 Stack Overflow の人々を信頼してください!」-- あるいは、そもそも私が質問することはありません。なぜなら、最新の考え方をクラウドソーシングすることが、多くの場合、最良のアイデアであるからです。
HTTPSの質問を明確にするために、@Raduとのコメントでの有用な議論に続いて-
Snyder は次の 2 つのことを言っているようです。2.) HTTPS を使用できない状況では、ユーザー エージェントをチェックすることはまだあまり役に立ちません (これは、彼がおそらく古いアドバイスに同意しないポイントのようです)。