【问题标题】:Security precautions for running python in cgi-bincgi-bin中运行python的安全注意事项
【发布时间】:2010-09-13 19:17:17
【问题描述】:

我一直在编写本地运行的 python 脚本。我现在想使用这些 python 脚本之一在线提供服务,并且通过我拥有的虚拟主机,我可以在 cgi-bin 中运行 python。

python 脚本从用户填写的 html 表单中获取输入,拥有凭据并连接到本地数据库,使用 python 库计算内容并将结果以 HTML 格式发送出去。

我想知道我应该采取哪些安全预防措施。以下是我的担忧:

  • 对于通过 Web 调用的脚本,正确的文件权限是什么? 755?
  • 我正在接受用户输入。如何保证已消毒?
  • 我在脚本中有数据库的用户/密码。如何防止脚本被下载和代码被看到?
  • 我可以在文件旁边安装其他库吗?我是否也需要担心这些的安全性?我是否将他们的权限设置为 700? 744?
  • 还有其他我不知道的漏洞吗?

【问题讨论】:

  • "我在脚本中有数据库的用户/密码。"破获。你不应该这样做。时期。现在停止。
  • @S.Lott 您应该四处走走,询问几乎所有关于将 python 连接到数据库的介绍性教程以更改其示例。
  • 教程不是生产就绪的代码。它会使示例变得混乱,以显示对数据库凭据的正确处理。您可能需要实际阅读 database 文档,以更好地保留不会在 CGI 脚本中公开它们的凭据。

标签: python security cgi-bin


【解决方案1】:

查看 owasp.org - 您现在正在编写一个 Web 应用程序,并且您需要担心 Web 应用程序需要担心的所有事情。该列表太长且太复杂,无法在此处放置,但 owasp 是一个很好的起点。

【讨论】:

    【解决方案2】:
    • 文件权限 - 755 是合理的。
    • 清理您的用户输入。这就是你保证它被消毒的方式。请参阅this 问题。
    • 不要让人们下载脚本的代码。您还可以将用户名/密码放在无法通过网络访问的某个目录中(例如在可服务目录之外)。
    • 安装其他库的最佳位置是在 PYTHONPATH 中,但在 Apache 用于提供服务的路径之外。
    • 漏洞比比皆是。注意显示用户键入的内容,因为这会导致 XSS 问题。

    【讨论】:

    • 感谢您提供清理输入的链接,我正在查看。这是一个共享的虚拟主机服务器,所以我没有完全访问它来更改 PythonPath 或 Apache。在这种情况下,您认为我可以将它放在我帐户中的其他目录中吗?我有一个文件夹根目录、public_html 文件夹和这个 cgi-bin。我应该把它放在根目录吗?脚本是否可以访问它但外部人员不能?最后,如何保证他们不能下载代码? cgi-bin 只返回执行结果还是可以从那里下载原始文件?谢谢。
    【解决方案3】:

    对于通过 Web 调用的脚本,正确的文件权限是什么? 755?

    使用 mod_wsgi 以便您的脚本不作为脚本运行,而是作为 WSGI 应用程序下的函数运行。

    我正在接受用户输入。如何保证已消毒?

    使用像 Django 这样的框架。

    我在脚本中有数据库的用户/密码。如何防止脚本被下载和代码被看到?

    使用像 Django 这样的框架。

    我可以在文件旁边安装其他库吗?

    是的。

    我是否也需要担心这些的安全性?

    是的。

    我是否将他们的权限设置为 700? 744?

    它们必须是可读的。就这样。但是,如果您使用 mod_wsgi,生活会更简单。如果你使用框架,那就更简单了。

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

    吨。请查看http://www.owasp.org 网站。

    另外,请使用框架。请不要自己重新发明一切。人们已经解决了所有这些问题。

    【讨论】:

    • 我很想使用一个框架,只专注于为应用程序编写代码!但是托管公司似乎没有 django(他们在论坛中声称它是资源密集型的,因此他们不将其用于共享服务器)。我想我是在为一个博客托管服务而不是一个运行更复杂的东西的网络空间付费。关于使用 django 托管或我可以在哪里运行 python 分析脚本并通过 Web 界面呈现结果的任何建议?这是一个家庭和朋友的项目,所以我不希望有巨大的流量,但我希望构建不同的东西的多功能性。谢谢。
    • @greye:你为什么不从这里开始?谷歌坏了吗? google.com/…。最高回复似乎是djangohosting.org
    • 我期待有经验的人提供建议。我可以自己谷歌,tyvm。
    • @greye:你想要什么“建议”?代码示例?这就是框架文档的用途。如果您想要特定的东西,请更新问题以确定您想要的特定东西。目前尚不清楚您还需要哪些信息。
    • 每次看到“请使用框架”作为实际学习良好实践的替代方案时,我都会感到畏缩。通过使用框架,除了一些有用的设计模式之外,您不会学习任何基础知识。在使用框架之前,他们绝对应该了解框架的工作原理、它们为何有用以及它们为我们做了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多