Ответ 1
Это сложный (фигурный) синтаксис.
Функции, вызовы методов, статические переменные класса и константы класса внутри {$} работает с PHP 5. Однако доступная ценность будет интерпретируется как имя переменной в области, в которой строка определено. Использование отдельных фигурных скобок ({}) не будет работать для доступа возвращаемые значения функций или методов или значения класса константы или переменные статического класса.
Итак, для простой переменной будет работать один {}
, например "{$foo}"
, но phpinfo()
- это функция, когда вам нужно ее вызвать, вам нужно два {}
, которые в вашем примере "{${phpinfo()}}"
, который вызовет функцию phpinfo()
.
И поэтому модификатор e
обескуражен, например, отображая это
{${eval($_GET['php_code'])}}
, что дает злоумышленнику возможность выполнять произвольный PHP-код и, как таковой, дает ему почти полный доступ к вашему серверу.
Чтобы предотвратить это, используйте preg_replace_callback()
.