使用PHP和/或Maxima对Maxima命令进行用户输入验证

时间:2016-04-22 13:02:56

标签: php security tomcat maxima

我在 tomcat 服务器上运行了 maxima ,我使用 php 进行访问。

在我的网站上,用户可以执行maxima命令,使用php发送到我的tomcat服务器。

但是,这使我无法确保用户提供的输入是安全的。例如,我想禁止使用危险的最大值函数,如writefile(以及其他许多函数)。

目前我只是使用php验证输入,使用列入黑名单的单词,我使用strpos检查其出现情况。显然这根本不安全,因为用户只需输入'write' . 'file' . '()'而不是writefile(),从而避免检查列入黑名单的单词。

我怀疑PHP是我应该用来确保提供的输入是安全的,所以我想知道是否有办法将我的tomcat服务器上的某些函数列入黑名单?

2 个答案:

答案 0 :(得分:2)

IMO,多层安全解决方案是您唯一的选择。

  1. 尽可能多地验证php用户输入。不要忘记限制允许的最大输入长度

  2. 千里马是开源的,所以你可以扯掉所有危险的'命令。我的lisp知识有限,所以我不能说用户是否能够解决这个限制。

  3. 将您的tomcat放入jail / virtual machine。

答案 1 :(得分:2)

我同意很多关于多层安全性的奇怪问题,并且只有一些想法可以做出贡献。

这些千里之外的步骤可能是最重要的:

  • 监狱/ VM
  • 限制输入和输出的大小
  • 限制在任何一次计算上花费的内存和/或CPU时间

一旦覆盖了前面的内容,这些内部的Maxima步骤就不那么重要了:

  • 禁止:lisp输入
  • 禁止Lisp符号(即?foo
  • 重新定义通常具有副作用的函数(例如,读取和写入文件的函数)无所作为

我认为如果你重新定义副作用功能,你就不需要打扰黑名单了。用户可以拨打writefile或其他任何内容但不起作用。您可以在Maxima中重新定义内置函数,并且新定义优先于内置版本。请注意,符号foo([a]) := ...表示a是所有参数的列表(任意数量的参数),因此您不需要考虑每个函数需要多少个参数。

writefile ([a]) := false;

为了更好地衡量,您也可以删除内置的Lisp函数。

?fmakunbound (writefile);

请参阅FMAKUNBOUND中的Common Lisp Hyperspec