我有一个简单的家庭网络服务器,使用 Apache 设置,但我宁愿不安装和使用 PHP。我正在寻找脚本来处理我网站的基本动态部分。但是,我听说使用 cgi-bin 目录中的 bash/shell 脚本来实现这些目的效率低下/不安全。
使用 bash 脚本处理来自输入字段的 POST 数据会面临哪些安全风险?如果我决定在我的网站上使用 shell 脚本,我可能还会面临哪些其他攻击?我该如何减轻这些风险?
有没有更好的方法来安全高效地构建动态网站?我是否不应该使用 cgi-bin 目录?如果不使用,替代方案的好处/风险是什么?
答案1
严肃地说,使用 shell 脚本来解析哪怕是最简单的 Web 请求都是不明智的。Shell 脚本往往会以太多不同的方式混淆正在运行的代码和输入。对于任何不小的流量,性能都可能成为一个问题,因为大型脚本通常会生成许多子 shell 和程序。
此外,也没有什么值得关注的严肃的 Bash 网络库。
我建议为此目的使用 Perl 或 PHP。
答案2
实际上,Openwrt项目(https://openwrt.org/) 在其“whiterussian”分支中使用 Bash(我不知道在较新的分支中是否如此)来提供动态内容(Web 管理面板)。但请记住,它是嵌入式系统(Linksys 路由器)的固件,因此通常没有资源(内存)来安装任何更复杂的内容(PHP)。
此外,此类管理面板(或至少应该)仅可从内部网络访问,因此应用程序不会暴露给公众(不受信任的)输入。
在其他情况下(尤其是在 PC 环境中),很难证明使用 Bash 来提供动态 Web 内容是合理的。