在cgi-bin中运行Python的安全防范措施
我最近在写一些可以在本地运行的Python脚本。现在我想把其中一个脚本放到网上,提供一个在线服务。通过我现在的网络主机,我可以在cgi-bin目录下运行Python。
这个Python脚本会从用户填写的HTML表单中获取输入,然后用一些凭证连接到本地数据库,利用Python的库进行计算,最后把结果以HTML格式发送出去显示。
我想知道我应该采取哪些安全措施。以下是我担心的几个问题:
- 通过网页调用的脚本,应该设置什么样的文件权限?755合适吗?
- 我在接收用户输入,怎么确保这些输入是安全的?
- 我的脚本里有数据库的用户名和密码,怎么防止别人下载这个脚本并看到代码?
- 我可以把其他库安装在这个文件旁边吗?我需要担心这些库的安全性吗?它们的权限应该设置成700还是744?
- 还有其他我不知道的安全隐患吗?
3 个回答
通过网页调用的脚本,应该设置什么样的文件权限?755可以吗?
使用mod_wsgi,这样你的脚本就不是作为脚本运行,而是作为WSGI应用程序下的函数来运行。
我在接收用户输入,怎么保证这些输入是安全的?
可以使用像Django这样的框架。
我的脚本里有数据库的用户名和密码,怎么防止脚本被下载,代码被看到?
同样可以使用像Django这样的框架。
我可以把其他库放在文件旁边吗?
可以的。
我需要担心这些库的安全性吗?
需要。
我应该把它们的权限设置为700还是744?
它们必须是可读的,仅此而已。不过,如果你使用mod_wsgi,事情会简单一些。如果使用框架,情况会更简单。
还有其他我不知道的安全漏洞吗?
有很多。请查看http://www.owasp.org网站。
另外,请使用框架。不要自己重新发明轮子,很多人已经解决了这些问题。
文件权限 - 755 是个合理的设置。
要对用户输入进行清理。这样才能确保输入是安全的。可以参考 这个问题。
不要让别人下载你的脚本代码。你也可以把用户名和密码放在一个无法通过网络访问的目录里(比如放在可服务目录之外)。
安装其他库的最佳位置是你的 PYTHONPATH,但要确保它不在 Apache 用来提供服务的路径下。
漏洞随处可见。要小心显示用户输入的内容,因为这可能导致 XSS(跨站脚本攻击)问题。
去看看owasp.org吧——你现在正在写一个网页应用,所以你需要关注网页应用需要注意的所有事项。这个列表太长太复杂,不能在这里全部列出来,但owasp是一个很好的起点。