2016-04-22 15 views
1

У меня максимумов работает на сервере в TOMCAT, что я получить доступ с помощью PHP.пользователя проверка Maxima команд с помощью PHP и/или Максим

На моем веб-сайте пользователи могут выполнять команды maxima, которые отправляются на мой сервер tomcat с использованием php.

Однако это оставляет мне проблему с обеспечением безопасности ввода данных, предоставленного пользователем. Например, я хочу запретить использование опасных функций максимумов, таких как writefile (среди многих других).

В настоящее время я просто проверяю ввод с использованием php, используя список вложенных в черный список слов, чье присутствие я проверяю с помощью strpos. Очевидно, что это совсем не безопасно, потому что пользователь может просто ввести 'write' . 'file' . '()' вместо writefile(), тем самым обойдя проверку для вложенных в черный список слов.

Я сомневаюсь, что PHP - это то, что я должен использовать, чтобы убедиться, что предоставленный ввод защищен, поэтому мне интересно, есть ли способ занести в черный список некоторые функции INSIDE maxima на моем сервере tomcat?

+0

upvoting, потому что это интересный, продуманный вопрос для среднего php-dev – strangeqargo

ответ

2

IMO, многоуровневое решение для обеспечения безопасности - это ваш единственный выбор.

  1. Подтвердите ввод пользователя php как можно больше. Не забудьте ограничить максимально допустимую длину входного сигнала

  2. Maxima - это с открытым исходным кодом, поэтому вы можете сбрасывать все «опасные» команды. У меня ограниченное знание lisp, поэтому я не могу сказать, смогут ли пользователи взломать это ограничение.

  3. Поместите свой кот в тюрьму/виртуальную машину.

2

Я соглашаюсь с странным вопросом о многоуровневой безопасности и имею только несколько идей для внесения вклада.

Эти снаружи из-Maxima шагов, вероятно, самое главное:

  • Тюрьма/VM
  • предельный размер входного и выходного предела памяти
  • и/или процессорное время на какой-либо вычисления

Эти внутри-на-Maxima шагов менее важны, как только предыдущий материал покрыт:

  • disallow :lisp ввод
  • Запретить символы Лиспа (т. ?foo)
  • переопределять функции, которые обычно имеют побочные эффекты (например, функции для чтения и записи файлов) не делать ничего

Я думаю, если вы переопределять функции бокового эффекта, вам не нужно беспокоиться в черный список , Пользователи могут позвонить по номеру writefile или что-то еще, но это не влияет. Вы можете переопределить встроенную функцию в Maxima, и ваше новое определение имеет приоритет над встроенной версией.Обратите внимание, что обозначение foo([a]) := ... означает, что a - это список всех аргументов (любое количество аргументов), поэтому вам не нужно думать о том, сколько аргументов принимает каждая функция.

writefile ([a]) := false; 

Для хорошей меры вы также можете удалить встроенную функцию Lisp.

?fmakunbound (writefile); 

См FMAKUNBOUND в Common Lisp Hyperspec.

+0

Думаю, он должен использовать черный список только для регистрации злоумышленников. – strangeqargo

+1

Да, это хорошая идея. Другой способ сделать это - переопределить черные списки, чтобы все, что они делают, - это написать сообщение в файл журнала. Что-то вроде: 'writefile ([a]): = block (printf (my_log,« Привет, writefile был вызван. ~% »), False);' –