безопасность — проверка ввода пользователем команд Maxima с использованием PHP и / или Maxima

я имею максима работает на Кот сервер, к которому я обращаюсь, используя PHP.

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

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

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

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

1

Решение

IMO, Многоуровневое решение для безопасности — ваш единственный выбор.

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

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

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

2

Другие решения

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

Эти шаги за пределами Maxima, вероятно, наиболее важны:

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

Эти шаги внутри максимума становятся менее важными, когда покрыты все предыдущие элементы:

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

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

writefile ([a]) := false;

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

?fmakunbound (writefile);

Увидеть FMAKUNBOUND в Common Lisp Hyperspec.

2

По вопросам рекламы [email protected]