Я унаследовал веб-сайт WordPress, который использует плагин RunPHP для выполнения фрагментов кода PHP между постами. У меня такое ощущение, что это не лучший способ реализовать такую функциональность. Но так как это устаревший код, который был функционально корректным в течение очень долгого времени, мне понадобятся несколько убедительных примеров проблемных сценариев.
Для тех, кто не знаком с RunPHP, это плагин, который выполняет код PHP, встроенный в тело сообщения или страницы, используя eval (). Блок кода никогда не поступает от пользователя, но вводится в базу данных владельцем сайта / создателем контента.
Вариант использования этого плагина в нашем контексте следующий.
Форма создается как сообщение, действие отправки которого установлено на страницу (назовем ее обработчиком формы). Обработчик формы содержит код PHP в своем теле, и плагин RunPHP активирован для этой страницы. Когда форма отправляется, обработчик формы получает данные и выполняется код PHP в ее теле.
Это помимо некоторых довольно явных проблем безопасности в коде обработчика форм (динамическая оценка переменных, переданных пользователем, без очистки ввода, без параметризованных запросов SQL).
Может ли кто-нибудь здесь подтвердить мои сомнения по поводу подключаемых модулей выполнения кода во время выполнения в WP?
Очень ценится.
Код формы в сообщении -
<form action="/?p=1234" method="post">
<input name="foobar" type="text" />
<input type="submit" />
</form>
Код обработчика на странице (он хранится в базе данных и eval () - редактируется во время выполнения) -
<?php
$foobar = $_POST["foobar"]; // This contains a SQL-injection vulnerability; But that's a separate issue, I think
$query = "INSERT INTO table (field) VALUES (\"" . $foobar . "\")"; // Use variable in a query string
?>