2012-07-08 93 views
1

我必须通过发布请求(使用Flash上​​传器)提交用户会话ID。 项目基于Zend Framework。将PHP会话存储在JS变量中?

现在的IAM不知道如果我的实现是 “安全”:

查看

var session = "<?= Anon_SimpleCrypt::encrypt(Zend_Session::getId(), 'SOME_KEY'?>"; 

控制器:

$sessionId = $_POST['SESSION_ID']; 
    $sessionId = Anon_SimpleCrypt::decrypt($sessionId, 'SOME_KEY'); 
    Zend_Session::setId($sessionId); 

加密/解密:

public static function encrypt($value, $encryptionKey) 
    { 
     $result = ''; 
     $encryptionKey = $encryptionKey . self::getSalt($value); 

     for ($count = 0; $count < strlen($value); $count++) { 
      $char = substr($value, $count, 1); 
      $keychar = substr($encryptionKey, ($count % strlen($encryptionKey)) - 1, 1); 
      $char = chr(ord($char) + ord($keychar)); 
      $result.=$char; 
     } 

     return base64_encode($result); 
    } 

    public static function decrypt($value, $encryptionKey) 
    { 
     $result = ''; 
     $value = base64_decode($value); 

     $encryptionKey = $encryptionKey . self::getSalt($value); 

     for ($i = 0; $i < strlen($value); $i++) { 
      $char = substr($value, $i, 1); 
      $keychar = substr($encryptionKey, ($i % strlen($encryptionKey)) - 1, 1); 
      $char = chr(ord($char) - ord($keychar)); 
      $result.=$char; 
     } 

     return $result; 
    } 

回答

0

您不需要加密会话ID。只需以纯文本格式发送。会话ID通常以未加密方式存储在客户端的Cookie中,这也不例外。此外,如果有人获得加密的会话ID,他们仍然可以使用该会话,因为无论如何您都可以在服务器上解密它。

+0

在Cookie中存储sessionId与通过javascript变量提供sessionId不同。该cookie应该标记为HTTPOnly,完全是为了防止它可用于JavaScript。 – Jacco 2012-07-09 12:47:21