gpt4 book ai didi

php - 出于安全原因,如何覆盖 php 内存?

转载 作者:IT王子 更新时间:2023-10-28 23:34:35 26 4
gpt4 key购买 nike

我实际上正在编写一个安全脚本,我似乎遇到了 PHP 和 PHP 使用内存方式的问题。

我的.php:

<?php
// Display current PID
echo 'pid= ', posix_getpid(), PHP_EOL;

// The user type a very secret key
echo 'Fill secret: ';
$my_secret_key = trim(fgets(STDIN));

// 'Destroty' the secret key
unset($my_secret_key);

// Wait for something
echo 'waiting...';
sleep(60);

现在我运行脚本:

php my.php
pid= 1402
Fill secret: AZERTY <= User input
waiting...

在脚本结束之前( sleep 时),我生成一个向脚本发送 SIGSEV 信号的核心文件

kill -11 1402

我检查了核心文件:

 strings core | less

这是结果的摘录:

...
fjssdd
sleep
STDIN
AZERTY <==== this is the secret key
zergdf
...

我知道内存只是在未设置的情况下被释放而不是“销毁”。数据并未真正删除(调用 free() 函数)

所以如果有人dump了进程的内存,即使在脚本执行之后,他也可以读取$my_secret_key(直到内存空间被另一个进程覆盖)

有没有办法在PHP脚本执行后覆盖整个内存空间的这个内存段?


感谢大家的意见。

我现在已经知道系统是如何管理内存的了。

即使 PHP 不使用 malloc 和 free(但一些编辑版本,如 emalloc 或 efree),似乎(并且我理解为什么)PHP 在释放不允许的内存后根本不可能“垃圾”。

这个问题更多是出于好奇,每条评论似乎都证实了我之前打算做的事情:用内存感知语言(c?)编写一小段代码,通过使用 malloc 分配一个简单的字符串来处理这个特殊部分, 使用 THEN freeing 后用 XXXXXX 覆盖。

谢谢大家

J

最佳答案

您似乎对内存管理的一般工作方式缺乏很多了解,特别是在 PHP 中。

当您考虑这里的安全风险时,对各个要点的讨论是多余的:

So if someone dumps the memory of the process, even after the script execution

如果有人可以访问在不同 uid 下运行的程序的内存,那么他们就具有 root 访问权限,并且可以通过许多其他方式破坏目标 - 无论是 PHP 脚本、ssh 还是 Oracle DBMS,都没有关系。 ...

如果有人可以访问以前被现在终止的进程占用的内存,那么他们不仅获得了 root 权限,而且已经破坏了内核。

关于php - 出于安全原因,如何覆盖 php 内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7244395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com