8

最近、エラーログでこれを確認しました(1日1回、1日4万人の訪問者がいます)。

[22-Sep-2009 21:13:52] PHP Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /var/my_files/class.session.php on line 67 
[22-Sep-2009 21:13:52] PHP Warning: Unknown: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in Unknown on line 0 
[22-Sep-2009 21:13:52] PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct () in Unknown on line 0

これはすべての人に有効であるため、構成の問題ではありません。

私はすでにphp.iniを変更してこれを持っています:

session.use_only_cookies = 1
session.use_trans_sid = 0

セッションハイジャックまたは私が気付いていない一種の攻撃を疑っています(私はパラノです;))。

あなたはそれが何であるかについて何か考えがありますか?セキュリティを向上させ、これを回避するにはどうすればよいですか?

4

3 に答える 3

18

ここでおそらく行われていることは、このクライアントがPHPSESSIDCookieのコンテンツを変更したことです。通常、SessionIDは「62bf75fb02922cf9c83fb3521255b4ab」(16進数)のようなものです。

ただし、ユーザーがいくつかのツールを使用してCookieを変更した可能性があります。この変更はクライアント側で行われ、そうすることでサーバーに影響を与えないため、これによってWebサイトとサーバーに害が生じることはありません(これらのエラーの生成を除く)。このようなエラーが発生した場合は、セッションIDを変更し、クライアントにあるものを置き換えることができます。

解決策を参照してください:

$ok = @session_start();
if(!$ok){
  session_regenerate_id(true); // replace the Session ID
  session_start(); // restart the session (since previous start failed)
}

PHPセッションCookieを介してファイルを置き換えたり、サーバーに書き込んだりすることはできません。セッションが正常に開始された場合にのみ、PHPは現在のセッションに関するセッションファイルを書き込み、それをtmpフォルダーに保存します。ファイルが古くなると、ファイルは削除されます。

于 2009-09-23T00:17:28.487 に答える
3

これはおそらくスパムボットが原因です。多くのスパムボットがGETパラメータとしてセッションIDを送信しているのを目にします。その後、それらはSMTPインジェクションまたは電子メールの送信に使用しようとします。ログのどこかで証拠を見つけようとしますが、少なくとも12のサイトでそれが起こったことはわかっています。私がそれを見たとき、GET変数は次のようになりました:?sid=v14gra@spam.com\n\subject:blah blah blah\n\nspam email here etc...

于 2009-09-23T00:39:53.427 に答える
1

おそらく、誰かがセッションCookieに不正なセッションIDを持っていて、エラーを引き起こしていると推測されます。

セッションハイジャックに無効なセッションIDを使用する方法がわかりません。

エラーを再現したい場合:

<?php
error_reporting(E_ALL);
session_start();
session_id ("$");
于 2009-09-22T23:43:06.400 に答える