我应该认为 go lang net/http 框架有多安全?
我明白这是一个多么广泛的问题,但我想知道我应该如何考虑框架本身,而不是在它之上构建的应用程序。
如果我要构建以下示例代码并在开放至互联网的端口上运行它,我需要担心服务器受到损害吗?
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
答案1
一般来说:
这一切都取决于攻击者的熟练程度。找到一个(可利用的)漏洞总是需要耗费大量资源(相对于原始程序员的技能而言)。
与高级语言相比,在低级语言中更容易发现 bug(主要是因为在低级语言中,有更多行可以查找 bug);此外,在自主开发的软件中发现 bug 的可能性比在 Go、Java 等主流语言 VM 中更大。
再具体一点:
尽管 Go 仍然是一种年轻的语言,但它由相对较小的熟练专业人员社区积极维护。
所以我不会期望像 bind、sendmail、openssl 或 bash 这样存在巨大漏洞。
无论如何,如果我是你,我不会在没有适当预防措施(单独的 uid/gid、chroot、ulimits、有限的 cgroup、强化发行版)的情况下运行服务器,无论它是用什么语言编写的。