在服务器中启动新进程是一个安全漏洞吗
本文关键字:一个 安全漏洞 进程 服务器 启动 新进程 | 更新日期: 2023-09-27 18:24:34
在一个web应用程序.NET中,我必须动态地将html转换为pdf。我玩了一些开源项目。最后我找到了wkhtmltopdf。在服务器端,我的应用程序将调用wkhtmlpdf的服务器端进程,并传递参数并向用户提供pdf文件。
从安全角度来看,这种方法有多糟糕?它更容易受到机器人的攻击吗?
假设派生的程序在输入不可信时出现缓冲区溢出错误,导致任意代码运行。好的一面是:嘿,任意代码现在运行在另一个进程中,而不是服务器进程中。坏的一面是:任意代码现在拥有进程所拥有的所有权限。
将子系统与自己的过程隔离是一种很好的做法,但不要仅限于此。使用纵深防御。
-
以正确操作所需的最低权限启动新进程。这样,如果成功攻击它,伤害是有限的。
-
对流程的输入进行消毒,特别是如果它们来自不可靠的来源。确保文件大小合理,并且包含合理的数据。
你想要一次成功的进攻必须跳过十几个不可能的环节,而不仅仅是一个。
乔关于拒绝服务的观点也值得思考。
它很容易被人淹没你的服务器并对其进行操作。你可以将请求放入消息队列,然后让服务处理队列中的项目。这意味着您可以保证最多运行N个进程。最坏的情况是,您有一个很长的队列,您可以取消它。
如果使用消息队列,则可以将队列使用者移动到另一台(或多台)服务器上。如果您对服务有很大需求,这有助于分散服务器负载。在另一个服务上运行也意味着对数据的访问受限,这有利于安全,意味着可执行文件无法访问不需要的文件和内存
缺点是这是异步的,您需要通知文件已准备好下载。您还需要在等待下载时将其存储在某个位置。
这样做的好处是,用户在等待时不会占用HTTP服务连接,如果运行过程需要很长时间,则用户的连接不会超时。
在服务器上运行进程不能像现在这样是一个安全缺陷。因为在像您这样的情况下运行进程是某人请求的某些其他操作的结果。因此,导致运行可执行操作的方法/体系结构中可能存在安全漏洞。如果您在该层上感到足够安全,我就不会太担心调用单独的流程,尤其是因为它会为您提供的服务带来更多价值。