この記事では、
サイトが共有 Web サーバー上で実行されている場合は、同じサーバー上の他のユーザーがセッション変数を簡単に表示できることに注意してください。
GoDaddy のような大規模なホストでは、これに対する保護は本当にありませんか? それは本当に簡単でしょうか?それが簡単な場合、ホスト上の他のユーザーのセッション変数はどこにあるので、チェックアウトできますか?
この記事では、
サイトが共有 Web サーバー上で実行されている場合は、同じサーバー上の他のユーザーがセッション変数を簡単に表示できることに注意してください。
GoDaddy のような大規模なホストでは、これに対する保護は本当にありませんか? それは本当に簡単でしょうか?それが簡単な場合、ホスト上の他のユーザーのセッション変数はどこにあるので、チェックアウトできますか?
デフォルトではLinuxインストールおよびWindowsの同様のものをphp.ini#session.save_path
指しているため、これは途方もなく簡単です。/tmp
ほとんどのユーザーは、必要なために読み取りおよび書き込み特権を持っているため、これは悪いこと/tmp
です。これを防ぐには、セッション状態をデータベースに保存するか、PHPアプリケーションがセッションファイルを保存するかどうかを変更します。session_save_path
デフォルトでは、セッションファイルはphp.iniのsession.save_pathで指定された場所に保存されます。これは仮想ホストごとに個別に定義できますが、ファイルはhttpdプロセスで読み取り可能である必要があるため、場所がわかっている場合、スクリプトは別の仮想ホストからセッションファイルを読み取ることができます。
サーバーの他のユーザーがPHPソースを読み取ってデータベースのクレデンシャルを学習できない場合は、セッションをデータベースに保存できます(たとえば、ADODbを使用)。
これらの問題を回避するために、セッション データを DB に保存することをお勧めします。これにより、ユーザーのセッションからのライブ情報へのアクセスが容易になるという追加の利点があります。
PHP を使用していて、セッションの乗っ取りが心配な場合は、session_regenerate_id
( Link to Manual ) を参照してください。
ここで他の人が述べたように、これは session_save パスが公開されているという問題を解決しませんが、ハイジャック攻撃の 99.999% を防ぐ必要があります。
session.save_path を使用して、シャード ホストにいるときはいつでも、アカウント スペース内でのみ訪問者セッションを設定、保存、および処理します。
ディレクトリにアクセスできるホストの従業員以外はアクセスできません。
共有ホスト上のデフォルトのセッション ハンドラー/場所に依存しないでください。
<?php
$handle = opendir(session_save_path());
if ($handle == false)
{
return -1;
}
while (($file = readdir($handle)) !== false)
{
echo session_save_path() . '/' . $file .':<BR />';
if (ereg("^sess", $file))
{
$file_array = file(session_save_path() . '/' . $file);
foreach ($file_array as $this_line)
{
echo $this_line."<BR />";
}
echo '<BR /><BR />';
}
}
closedir($handle);
?>