在cgi-bin中运行Python的安全防范措施

2 投票
3 回答
3065 浏览
提问于 2025-04-16 04:05

我最近在写一些可以在本地运行的Python脚本。现在我想把其中一个脚本放到网上,提供一个在线服务。通过我现在的网络主机,我可以在cgi-bin目录下运行Python。

这个Python脚本会从用户填写的HTML表单中获取输入,然后用一些凭证连接到本地数据库,利用Python的库进行计算,最后把结果以HTML格式发送出去显示。

我想知道我应该采取哪些安全措施。以下是我担心的几个问题:

  • 通过网页调用的脚本,应该设置什么样的文件权限?755合适吗?
  • 我在接收用户输入,怎么确保这些输入是安全的?
  • 我的脚本里有数据库的用户名和密码,怎么防止别人下载这个脚本并看到代码?
  • 我可以把其他库安装在这个文件旁边吗?我需要担心这些库的安全性吗?它们的权限应该设置成700还是744?
  • 还有其他我不知道的安全隐患吗?

3 个回答

2

通过网页调用的脚本,应该设置什么样的文件权限?755可以吗?

使用mod_wsgi,这样你的脚本就不是作为脚本运行,而是作为WSGI应用程序下的函数来运行。

我在接收用户输入,怎么保证这些输入是安全的?

可以使用像Django这样的框架。

我的脚本里有数据库的用户名和密码,怎么防止脚本被下载,代码被看到?

同样可以使用像Django这样的框架。

我可以把其他库放在文件旁边吗?

可以的。

我需要担心这些库的安全性吗?

需要。

我应该把它们的权限设置为700还是744?

它们必须是可读的,仅此而已。不过,如果你使用mod_wsgi,事情会简单一些。如果使用框架,情况会更简单。

还有其他我不知道的安全漏洞吗?

有很多。请查看http://www.owasp.org网站。

另外,请使用框架。不要自己重新发明轮子,很多人已经解决了这些问题。

2

文件权限 - 755 是个合理的设置。

要对用户输入进行清理。这样才能确保输入是安全的。可以参考 这个问题

不要让别人下载你的脚本代码。你也可以把用户名和密码放在一个无法通过网络访问的目录里(比如放在可服务目录之外)。

安装其他库的最佳位置是你的 PYTHONPATH,但要确保它不在 Apache 用来提供服务的路径下。

漏洞随处可见。要小心显示用户输入的内容,因为这可能导致 XSS(跨站脚本攻击)问题。

5

去看看owasp.org吧——你现在正在写一个网页应用,所以你需要关注网页应用需要注意的所有事项。这个列表太长太复杂,不能在这里全部列出来,但owasp是一个很好的起点。

撰写回答