2011-08-05 5 views
8

は、それがセッション変数がtrueに=自分の$ _SESSION [「autheticated」]にするために格納されている場所セッションセキュリティ?

If ($_SESSION['authenticated'] == true) { 
    /////Show secure page 
} 

は、誰かが行くと変更することはできます使用することを確保していますか?

$ _SESSION ['id'] =を持つユーザーと同じことがインデックスIDにあります。私はこの担保をどのように作ることができますか? 誰かがid値を変更して別のユーザーになりすますことができますか?

以下の方法は、より安全なものを作る正しい方法でしょうか?

$_SESSION['random_check'] = (random number) 

とまた私のデータベースと私は

If ($_SESSION['authenticated'] == true && $_SESSION['random_check'] == random_number) { 
/////Then show secure page 
} 

だろうたびに列でこれを保管おかげで、

+0

私はすべての私のプロジェクトのユーザー名のハッシュと組み合わせ 'booleans'ともに更新してログインした日付(のためにこの方法を使用しますdb +がセッションで保持されている場合)、チェックが行われたときにすべてが有効と比較され、再度更新されます。共有ホスティングの場合は保存パスを変更してください。 –

答えて

3

私はほとんどのホスティングでのセッションはあなたにちょうどインタフェースであるかなり確信していますつまり、すべてのセッションデータがサーバのハードディスクに保存されている場合は、phpinfo()の出力を見ると、セッションデータの実際のパスがどこにあるかを見ることができます。

あなたがセッションパスを777にchmodして攻撃者があなたのアプリをホストしている場所を知ってログインしているのでなければ、それは大きな問題ではないと思います。

大きな問題は、攻撃者が正当なユーザーを偽装するために使用できるサーバーとクライアントを行き来する情報の一部としてCookieを保護することです。

1

はい、安全ですか?私はこれを使う。 私はこれを行います: - 有効なログインがある場合は、ログインをチェックして、$ _SESSION ['logged'] = 'yes'を設定してumトークンを生成します$ _SESSION ['token'] = 'トークン' 入力html要素に格納し、各アクションをチェックインします。 何かのように:process.phpで

<?php 

    class token { 



     public function generateToken() { 

      return $_SESSION['token'] = md5(microtime()); 

     } 



     function generateField($name = "token"){ 

      return "<input type='hidden' value='{$_SESSION['token']}' name='{$name}'>"; 

     } 



     public function getToken() { 

      return $_SESSION['token']; 

     } 



     public function getTokenFromFields($method = "GET") { 

      return strtoupper($method) == "GET" ? $_GET['token'] : $_POST['token']; 

     } 



     public function checkToken() { 

      return $this -> getToken() == $this -> getTokenFromFields(); 

     } 

     public function updateToken() { 
      $_SESSION['token'] = md5(microtime()); 
     } 

    } 



?> 

<?php 
//orther file 
require 'class.token.php'; 
$token = new token(); 
$Atoken = $token -> generateToken(); 
echo "<script> 

     var data = {}; 

     data['token'] = '{$Atoken}'; 

     data['foo'] = 'baa'; 
    </script>"; 
$token -> generateField(); 
?> 

<script> 
$.ajax({type:"GET", url:"process.php", "data=foo=baa&token=" + data.token, success:function(response) { } }) 
</script> 

<?php 
if($_SESSION['token'] == $_GET['token']) { 
//do something 
} else die('bad token'); 
?>