2

私は、一生解決できない問題を抱えています。クライアント用に非常にシンプルな CMS をセットアップしました。CMS の各ページには、session.php というファイルが含まれています。

session_start(); 
$username = $_SESSION['siteadmin'];
if (!$_SESSION['siteadmin']){
    header( 'Location: login.php?status=2' );
}  

ときどき、ランダムなものがデータベースから消えてしまいます。そこで、CMS を介してすべてのアクションをログに記録する粗いログ システムをセットアップしました。さて、それは再び起こりました。ログには次のように表示されます。

Logged in                           **.**.237.209   17:18  <-- thats me
Deleted board member id 12  195.42.102.25   16:49 
Deleted board member id 15  195.42.102.25   16:49 
Deleted board member id 8   195.42.102.25   16:49 
Deleted board member id 10  195.42.102.25   16:49 
Deleted board member id 9   195.42.102.25   16:49 
Deleted board member id 4   195.42.102.25   16:49 
Deleted board member id 3   195.42.102.25   16:49 
Deleted board member id 5   195.42.102.25   16:49 
Deleted board member id 6   195.42.102.25   16:49 
Deleted board member id 11  195.42.102.25   16:49 
Deleted board member id 7   195.42.102.25   16:49 
Deleted review id 2             195.42.102.25   16:49 
Deleted review id 3             195.42.102.25   16:49

そして、それは数ページ続きます。195.42.102.25 のログインも表示されません! 前回は 195.128.18.19 で発生しました。セッション変数なしでどのようにコンピューターがウィンドウをロードしていますか? 私のコードには、完全に見落としているセキュリティ ホールがありますか?!

この問題に関する洞察は素晴らしいでしょう。

ありがとう、

4

3 に答える 3

3

確かに、ヘッダーの後に出口またはサイコロを置きます。

ヘッダーのリダイレクトに従わず、後で実行されたものを取得するのは非常に簡単です。

The Daily WTF (およびより完全な) には、この問題に関する楽しい投稿があり、当面は見つけることができません。

編集:見つけた!:) http://thedailywtf.com/Articles/WellIntentioned-Destruction.aspx

于 2010-01-06T09:15:41.530 に答える
0

session_regenerate_id()session_start の後に追加することを検討してください。これにより、セッション Cookie の盗用が防止されます (上記の関数を使用すると、Cookie の ID の PHPSESSID がページ読み込みごとに再生成されますexit) 。

于 2010-01-06T09:13:24.477 に答える