Я на самом деле работаю над скриптом безопасности, и кажется, что я встречу с проблемой PHP, и способ использовать память PHP.
My.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...
до конца скрипта (во время сна) я генерирую основной файл, отправляющий сигнал SIGSEV в скрипт
kill -11 1402
Я проверяю CoreFile:
strings core | less
Вот выдержка результата:
...
fjssdd
sleep
STDIN
AZERTY <==== this is the secret key
zergdf
...
Я понимаю, что память только что выпускается с unset и не «уничтожена». Данные на самом деле не удаляются (вызов на бесплатную () функцию)
, поэтому, если кто-то сбрасывает память о процессе, даже после выполнения сценария, он мог прочитать $ my_secret_key (пока пространство памяти не будет перезаписано другим Процесс)
Есть ли способ перезаписать этот сегмент памяти полного пространства памяти после выполнения Script PHP?
Спасибо всем для ваших комментариев.
Я уже сейчас, как память управляется системой.
Даже если PHP не использует malloc и бесплатные (но некоторые отредактированные версии, такие как emalloc или efree), похоже (и я понимаю, почему) просто невозможно для PHP «мусор» после освобождения памяти.
Вопрос был больше любопытством, и каждый комментариев, по-видимому, подтверждает то, что я ранее намеревался сделать: напишите небольшой кусок кода в языке в памяти (C?) Для обработки этой особой части, выделяя простую строку с помощью malloc , перезаписи с XXXXXX после использования, освобождая.
Спасибо всем
J