考虑一个非常基本的 python 套接字,它在主机上打开一个到 Internet 的端口并监听传入的消息,这些消息显示在终端中。
像这样保持端口完全开放被认为是相当脆弱的,对吗?我应该实施哪些安全功能?是否应该对传入的数据进行清理?解决这个问题的最佳方法是什么?
谢谢。
为什么这会很脆弱?您的程序接受来自任意人的连接(可能在整个 Internet 上),并让他们向您的终端显示任意字节。这里只有一个攻击向量:您的终端本身。如果您的终端存在(例如)执行字节而不是打印字节的错误,那么系统可能会因为此设置而受到损害。
然而,这不太可能——事实上,验证程序没有完全损坏的一种常用技术是将任意数据传递给它们,看看它们是否/如何爆炸。这称为fuzz testing,如果您的终端在进行 fuzz 测试时存在这样的错误,则 fuzz 测试会产生非常有趣的爆炸,而不仅仅是终端垃圾。
仅仅因为某些东西可以通过端口访问 Internet 并不意味着存在漏洞。您需要一个实际可利用的缺陷,在这种情况下,可能没有。(虽然永远不知道。)
你想保护什么?除非 Python 解释器有未知的 vuln,否则使用 Python 侦听套接字不会直接将您暴露给 vuln。
处理传入的消息是另一回事。
如果您正在向终端写入,这是否意味着传入的数据应采用特定格式?你如何解析传入的数据?如果有人将 /dev/random 放入您的端口并长时间保持连接打开,会发生什么?
消息的顺序或内容重要吗?
等等。没有多少具体的场景需要评论,所以建议同样含糊不清。作为开始,请看一下通用概念的 OWASP安全编码原则(即使您不处理 HTTP 或 HTML,它们也适用)。