Data publikacji: Apr 21, 2012 9:52:57 PM
przekompilować PHP z opcją --enable-maintainer-zts (TODO: jakie to ma konsekwencje wydajnościowe?)
pobrać runkit ze strony https://github.com/zenovich/runkit
nałożyć łatkę z załacznika
skompilować i zainstalować runkit
używać bezpiecznego (TODO: czy napewno?) sandboxa
<?php
/* Definicja funkcji, którą będe mógł wywołać z poziomu sandboxa aby uzyskać
* dostęp do danych rodzica. */
runkit_function_add('_hash', '$a', 'return md5($a);');
/* Niebezpieczny kod, który zostanie wykonany w ramach sandboxa. */
$code = '$PARENT = new Runkit_Sandbox_Parent(); return $PARENT->_hash($value);';
/* Sprawdzenie poprawności kodu, przed jego wykonaniem. */
if (!runkit_lint($code)) {
die('ERROR IN CODE');
}
/* Stworzenie sandboxa - w num będe wykonywał niebezpieczny kod. */
$sandbox = new Runkit_Sandbox();
/* Umożliwienie dostępu do rodzica z sandboxa. */
$sandbox['parent_access'] = TRUE;
/* Dostęp jedynie do określonych funkcji rodzica. */
$sandbox['parent_call'] = array('_hash');
/* Przekazanie parametrów */
$sandbox->value = 'test';
/* Wykonanie niebezpiecznego kodu */
print $sandbox->eval($code);
/* Posprzątanie */
unset ($sandbox);
runkit_function_remove('_hash');