从PHP的物理内存中清除变量的值

WAS*_*D42 5 php memory encryption

一般的问题是:在PHP中取消设置String变量的值之后,是否可以从物理内存中删除该变量的值?

该问题是由安全标准的某些要求引起的(在处理某些重要数据时,应该没有办法将数据从内存转储到磁盘)。根据“ 内存是否已加密? ”主题,没有好的方法可以对内存中的数据进行加密。

因此,在PHP中取消设置String变量时,您不能肯定地说内存中的数据已被覆盖。关于为变量设置新值的相同故事。

因此,我是否有可能在不更改unset方法核心代码的情况下从内存中清除变量值?

Rya*_*n P 5

首先,我不确定擦除字符串是否会满足您描述的安全性要求,因为从理论上讲,无论如何擦除字符串之前,仍然可以转储内存。但是,无论如何这都是不可能的,因为没有内存就无法处理数据。

无论如何,如果您想确保擦除字符串,我认为在PHP中这样做的唯一方法是遍历字符串并修改每个字符:请记住,即使被覆盖,内存的内容也不会消失没有对该变量的引用,并且PHP GC已运行。

我相信这会起作用:

for( $i=0; $i < strlen($str); $i++ )
    $str[$i] = 'x';
Run Code Online (Sandbox Code Playgroud)


Art*_*pov -2

据我了解,问题不在于使用unset()PHP 的垃圾收集器,而是确保使用的内存实际上在物理级别上被清除?

简单的方法 - 只需在取消设置之前将其设置为 null (或任何其他值)请参阅使用 PHP 释放内存更好:unset() 或 $var = null

困难和愚蠢的方法是用垃圾分配所有 php 内存,以确保其被覆盖,但我不确定虚拟内存是否固定在预定义的音叉上,或者根据进程需要进行更改。