在php中安全删除文件

在php中安全删除文件,php,security,delete-file,Php,Security,Delete File,我想用PHP安全地删除一个文件。我想到了以下几种选择 通过系统调用使用分解。(exec,shell_exec,…),但在大多数共享主机中,这些功能被禁用,并且在安全模式打开时被禁用 通过fopen打开它,并用随机数据覆盖它,然后取消链接它。如果我错了,请纠正我,但在进行研究时,我发现它在某些服务器上被禁用 我想到的最佳选择是使用file\u put\u content将其数据覆盖为零,然后将其删除 问题是:文件内容是否保证覆盖文件?我在下面的示例中编写了一种过于简单的方法:这段代码会安全地删

我想用PHP安全地删除一个文件。我想到了以下几种选择

  • 通过系统调用使用
    分解
    。(exec,shell_exec,…),但在大多数共享主机中,这些功能被禁用,并且在安全模式打开时被禁用
    
  • 通过
    fopen
    打开它,并用随机数据覆盖它,然后
    取消链接
    它。如果我错了,请纠正我,但在进行研究时,我发现它在某些服务器上被禁用
  • 我想到的最佳选择是使用
    file\u put\u content
    将其数据覆盖为零,然后将其删除
问题是:文件内容是否保证覆盖文件?我在下面的示例中编写了一种过于简单的方法:这段代码会安全地删除文件吗?会有相当大的性能冲击吗?如何使它更“大文件友好”


更新:我发布的代码更多的是演示文件的覆盖:实际代码将是

的一个实现,而不是那么简单。如果删除值为“0”的文件,则仍可还原该文件。您应该使用任何一种算法进行真正安全的删除。例如:


它每个文件使用35次连续写入。

它并不是那么简单。如果删除值为“0”的文件,则仍可还原该文件。您应该使用任何一种算法进行真正安全的删除。例如:


它对每个文件使用35次连续写入。

找到一个执行此操作的PHP库

找到一个执行此操作的PHP库

如果您需要安全地处理文件,请不要使用共享托管。我知道共享托管带来的安全隐患和跨站点危害风险。尽管如此,我还是想知道我发布的方法是否“安全”,这取决于您对安全的定义。如果托管是好的,那么他们将保留备份。如果它存在于第三方备份中,您是否认为它已被安全删除?Jon在这里有一个很好的观点。除非您知道所使用的确切存储实现,否则您永远无法知道它是否“安全”,具体取决于设备类型(主轴与SSD),您的方法将有所不同。寻找一些洞察力。另外,请不要在SSD上覆盖35次,除非您的目标是使其作为设备变得无用。如果您需要安全地处理文件,请不要使用共享托管。我知道共享托管带来的安全隐患和跨站点危害风险。尽管如此,我还是想知道我发布的方法是否“安全”,这取决于您对安全的定义。如果托管是好的,那么他们将保留备份。如果它存在于第三方备份中,您是否认为它已被安全删除?Jon在这里有一个很好的观点。除非您知道所使用的确切存储实现,否则您永远无法知道它是否“安全”,具体取决于设备类型(主轴与SSD),您的方法将有所不同。寻找一些洞察力。另外,请不要在SSD上覆盖35次,除非您的目标是使其作为设备变得无用。
function secure_delete($file_path)
{
    $file_size = filesize($file_path);
    $new_content = str_repeat('0', $file_size);
    file_put_contents($file_path, $new_content);
    unlink($file_path);
}