WAS*_*D42 5 php memory encryption
一般的问题是:在PHP中取消设置String变量的值之后,是否可以从物理内存中删除该变量的值?
该问题是由安全标准的某些要求引起的(在处理某些重要数据时,应该没有办法将数据从内存转储到磁盘)。根据“ 内存是否已加密? ”主题,没有好的方法可以对内存中的数据进行加密。
因此,在PHP中取消设置String变量时,您不能肯定地说内存中的数据已被覆盖。关于为变量设置新值的相同故事。
因此,我是否有可能在不更改unset方法核心代码的情况下从内存中清除变量值?
首先,我不确定擦除字符串是否会满足您描述的安全性要求,因为从理论上讲,无论如何擦除字符串之前,仍然可以转储内存。但是,无论如何这都是不可能的,因为没有内存就无法处理数据。
无论如何,如果您想确保擦除字符串,我认为在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 内存,以确保其被覆盖,但我不确定虚拟内存是否固定在预定义的音叉上,或者根据进程需要进行更改。
| 归档时间: |
|
| 查看次数: |
1289 次 |
| 最近记录: |