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