4

我的托管公司说,当使用 Apache/HTTP POST 到 CGI-Bin Perl 脚本(例如NMS FormMail)。

他们说发生核心转储时,可以在服务器上运行任意脚本(存储为输入字段文本的一部分),这可能会危及站点。他们说这不是他们可以在他们的 Apache/Perl 配置中保护的东西——由 Perl 脚本通过限制发布字段中的字符数来防止这种情况。但似乎核心转储可能会在脚本限制字段大小之前发生。

这种类型的联系表格和方法被成千上万的网站广泛使用,所以我想知道他们所说的是否属实。你们那里的安全专家能启发我吗?这是真的吗?我也想知道 PHP 脚本是否会发生同样的事情。对于安全的站点联系脚本/方法,您有什么建议?

4

4 回答 4

3

我不确定缓冲区溢出,但无论如何限制 POST 大小也无妨。只需在脚本顶部添加以下内容:

use CGI qw/:standard/;
$CGI::POST_MAX=1024 * 100;  # max 100K posts
$CGI::DISABLE_UPLOADS = 1;  # no uploads 
于 2009-05-06T16:31:28.003 回答
1

您绝对应该向您的托管公司询问具体信息。里面有很多不相关的说法。

“缓冲区溢出”和“资源问题”是完全不同的事情。缓冲区溢出表明您将导致 perl 或 mod_perl 或 httpd 本身崩溃。如果是这种情况,那么这些组件之一中存在错误,他们应该引用有问题的错误并提供他们何时应用安全更新的时间表。这样的错误肯定会导致 Bugtraq。

另一方面,资源问题是完全不同的事情。如果我在我的 POST 中向您发送许多兆字节,那么我可以吃掉任意数量的内存。这可以通过在 httpd.conf 中配置 LimitRequestBody 指令来解决。默认为无限制。这必须由托管服务提供商设置。

他们说发生核心转储时,可以在服务器上运行任意脚本(存储为输入字段文本的一部分),这可能会危及站点。他们说这不是他们可以在他们的 Apache/Perl 配置中保护的东西——由 Perl 脚本通过限制发布字段中的字符数来防止这种情况。但似乎核心转储可能会在脚本限制字段大小之前发生。

同样,如果这是在 httpd(或)中创建核心转储mod_perl,那么它表示 httpd(或mod_perl)中的错误。Perl 的动态和垃圾回收内存管理原则上不受缓冲区溢出或坏指针的影响。这并不是说 perl 本身的错误不会导致这种情况,只是 perl 语言本身不具备以这种方式导致核心转储所需的语言特性。

当您的脚本可以访问数据时,要阻止此处描述的任何事情都为时已晚。您的脚本当然有其自身的安全问题,并且有很多方法可以诱骗 perl 脚本运行任意命令。没有太多方法可以让它们以这里描述的方式跳转到任意内存位置。

于 2009-05-07T14:03:58.833 回答
1

要求他们为您提供对该漏洞的具体参考。我确信有些版本的 Apache 可能会通过特制的 POST 请求导致缓冲区溢出,但我不知道任何特定于 NMS FormMail 的内容。

于 2009-05-06T18:53:28.207 回答
0

Formail 过去很容易受到此类攻击,因此我相信您的 ISP 正在使用它来说明。任何 perl 脚本中的不良做法都可能导致这样的灾难。

如果可能,我建议确保 perl 脚本验证所有用户输入。否则,请仅使用受信任的脚本并确保它们保持更新。

于 2009-05-07T10:18:08.813 回答