【问题标题】:Encrypting Decrypting sessions加密解密会话
【发布时间】:2016-02-08 07:54:35
【问题描述】:

我有这段代码将会话存储在数据库中。

public function read($id)  
{
   // $id=rtrim(@mcrypt_decrypt(MCRYPT_BLOWFISH, 'qwerty', base64_decode($id), MCRYPT_MODE_CBC,  md5(md5('protect me')) ),'\0');

    $result = mysqli_query($this->link,"SELECT Session_Data FROM Session WHERE Session_Id = '".$id."' AND Session_Expires > '".date('Y-m-d H:i:s')."'");
    if($row = mysqli_fetch_assoc($result)){
        return $row['Session_Data'];
    }else{
        return "";
    }
}


public function write($id, $data)
{
    //$id=@base64_encode(mcrypt_encrypt(MCRYPT_BLOWFISH, 'qwerty', $id, MCRYPT_MODE_CBC, md5(md5('protect me'))));
    $DateTime = date('Y-m-d H:i:s');
    $NewDateTime = date('Y-m-d H:i:s',strtotime($DateTime.' + 1 hour'));
    $result = mysqli_query($this->link,"REPLACE INTO Session SET Session_Id = '".$id."', Session_Expires = '".$NewDateTime."', Session_Data = '".$data."'");
    if($result){
        return true;
    }else{
        return false;
    }
}

在上面的代码中,我已经注释掉了加密和解密行,这些行实际上在存储到数据库中或从数据库中读取之前对 $id 进行加密和解密。

究竟会发生什么,当我不执行此加密和解密过程时。会话完全按应有的方式工作,但如果我要执行此过程,则存储在其中的会话数据将替换为当前会话。

为了让我的问题更清楚

我有两个 php 文件

1) test1.php

<?php

require_once('inc.session.php');

session_start();

   $_SESSION['var1'] = "My Portuguese text: SOU Gaucho!";
?>

2) test2.php

<?php
//page 2
require_once('inc.session.php');

 session_start();
$_SESSION['wef']="abbaba";

if(isset($_SESSION['var1'])){
echo $_SESSION['var1'];
  }
 ?>

数据库

上一个是没有加密过程,后一个是有加密过程。从图中可以清楚地看出会话数据与之前不完全相同。为什么会这样?

【问题讨论】:

  • 您可以在解密 session_id 之前注册var1,当您将 session_id 作为当前会话加载时,var1 只是删除,因为它不是同一个会话。但我只是预测。您能否分享与此过程相关的完整代码库。不清楚。

标签: php session encryption


【解决方案1】:

在您深入研究编写密码学(即加密)代码之前,您应该尝试learn about application security

你为什么一开始就在数据库中加密你的会话 ID?你在向谁隐瞒?只是批发存储它。

【讨论】:

  • 我正在加密会话 ID,因为我认为它可能会阻止会话劫持
  • 我在我的 php 代码上尝试了准备好的语句,但它给了我以下错误。你介意看看:stackoverflow.com/questions/35263758/prepare-not-defined
  • 现在该怎么办?如何防止自己被sql注入?
  • "我正在加密会话 ID,因为我认为这可能会阻止会话劫持" No. Just use TLS.
猜你喜欢
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-31
  • 2010-12-14
  • 2016-11-15
  • 2014-07-06
  • 1970-01-01
相关资源
最近更新 更多