Para engancharse en el comentario de @ UTF-8 , usando PHP_Parser
, puede generar bastante fácilmente una lista de funciones PHP predeterminadas que su aplicación no usa realmente y que luego puede almacenar en el Opción de configuración disabled_functions
:
<?php
require 'vendor/autoload.php';
use PhpParser\Node;
use PhpParser\NodeTraverser;
use PhpParser\ParserFactory;
use PhpParser\NodeVisitorAbstract;
use PhpParser\PrettyPrinter\Standard;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\Function_;
class Collector extends NodeVisitorAbstract
{
public $functions = [];
public function leaveNode(Node $node)
{
if ($node instanceof PhpParser\Node\Expr\FuncCall)
$this->functions[] = (string) $node->name;
}
}
$sourcePath = __DIR__ . '/test/';
$files = new \CallbackFilterIterator(
new \RecursiveIteratorIterator(
new \RecursiveDirectoryIterator($sourcePath),
\RecursiveIteratorIterator::SELF_FIRST
),
function($current, $key, $iterator) { return preg_match('~.php$~i', (string) $current) > 0; }
);
$nodeTraverser = new NodeTraverser();
$nodeTraverser->addVisitor($visitor = new Collector());
$parserFactory = new ParserFactory();
$parser = $parserFactory->create(ParserFactory::PREFER_PHP7);
foreach ($files as $file)
{
$stmts = $parser->parse(file_get_contents((string) $file));
$nodeTraverser->traverse($stmts);
}
$defined_functions = get_defined_functions();
$blocked_functions = array_diff($defined_functions['internal'], $visitor->functions);
echo 'disabled_functions = "', join(',', $blocked_functions), '"', PHP_EOL;
Se puede crear algo similar para disable_classes
, solo busque PhpParser\Node\Expr\New_
en su lugar.
Algunas cosas a considerar:
- Su primer paso debería ser reducir la cantidad de módulos que se está cargando su instancia de PHP.
- Va a ser molesto manejar esto.
- Vas a tener un mal momento si usas algo dinámicamente.
- Tener una configuración
disable_functions
grande puede tener un impacto en el rendimiento. Es posible que desee considerar el uso de la funcionalidad de la lista blanca de Suhosin como lo sugiere enlace .