Задать вопрос
@Artem0071
Безработный mr. Junior

Как записывать пользовательский код?

Добрый день!

У меня в проекте есть одна функция, которая может редактироваться пользователем.

Как это сделано сейчас:

Есть БД с идентификатором и строковой переменной (наименование_файла.php)
Эти файлы хранятся в отдельной папке.
Файлы имею такую структуру:
function userFunc($id, $message){
   // some code
  return $some_param ;
}


В исходнике примерно следующее получается:
// some code

$user_func = App->selectUserFunc($user_ID);  // записывает в переменную пользовательскую функцию (название в папке), либо возвращает false 

if ($user_func){
   require_once USERS_FUNCTIONS.$user_func.'.php';  // запрашиваем функцию
   
   $some_param = userFunc($some_id, $some_message);
}


В чем собственно вопрос

Как сделать редактор для пользователей, как его проверять, что из него удалять? Либо все пользовательские функции просто записывать в БД в виде текста, и после валидации записывать?
Но если я хочу сделать онлайн проверку кода?
  • Вопрос задан
  • 140 просмотров
Подписаться 1 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
sabramovskikh
@sabramovskikh
Как-то это не безопасно..
DROP TABLE
rm -rf
И все, до свидания хостинг)
Ответ написан
@Fortop
Tech/Team lead
Нельзя так выполнять пользовательские функции.

Создавайте контейнер под них. Выгружать функцию в какой-то файл, который автоматически выполняется при запуске контейнера.
И пусть эти функции работают только и исключительно там.
При этом сразу лучше зарезать работу с сетью, консолью и т.п.
Ответ написан
Комментировать
@errogaht
PHP developer
codemirror.net/mode/php/index.html
https://microsoft.github.io/monaco-editor/

единственный вариант для валидации кода это библиотека вроде этой https://github.com/squizlabs/PHP_CodeSniffer нужно пропускать код через неё и выводить ошибку в редактор

составить список разрешённх функций. с помощью парсера PHP https://github.com/nikic/PHP-Parser проверять код, если там есть запрещенные функции ты посылать пользователя. если код нормальный то делать eval и выводить результат пользователю
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы