【问题标题】:Python web based interpreter security issues基于 Python Web 的解释器安全问题
【发布时间】:2019-05-25 00:34:58
【问题描述】:

我正在制作一个基于 web 的 python 解释器,它将在基于 Linux 的 python3 解释器上执行代码并在同一网页上提供输出。但这有一些严重的循环漏洞,比如有人可以使用 python 的 os 模块执行 bash 脚本,可以检查目录中的 Web 应用程序的源代码等等。

谁能建议我如何在我的应用程序中防止这种事故 问候

【问题讨论】:

  • 您需要清理用户输入。这是对一个广泛问题的广泛回答。
  • 这叫做沙盒。谷歌搜索“Python沙箱”应该有一堆好建议
  • @thatotherguy 这就是我要找的问候

标签: python linux bash security


【解决方案1】:

简答:没有简单的“仅 python”解决方案。

一些细节:

  • 用户可以随时尝试调用os、sys、with open(SENSITIVE_PATH, 'rw') as f: ...等,仅通过分析代码很难检测到所有这些情况

  • 1234563写一个像from thirdparty.some_internals import os_ex; os_ex(...)这样的脚本。

或多或少可靠的解决方案是使用“外部沙盒”解决方案:

  • 在非特权 docker 容器中运行解释器。例如:

    1. 将不受信任的脚本写入将通过 docker 容器中的卷公开的文件
    2. 在 docker 中执行该脚本:

      一个。 subprocess.call(['docker', 'exec', 'CONTAINER_ID', '/usr/bin/python', 'PATH_TO_SCRIPT'])

      b. subprocess.call(['docker', 'exec', 'CONTAINER_ID', '/usr/bin/python', '-c', UNTRUSTED_SCRIPT_TEXT])

  • 使用 PyPy-s sandbox。

  • 搜索一些“安全”IPython kernel for Jupyter notebook server。或write your own。注意:现有内核不保证安全,可能允许调用subprocess.check_output、os.rm 等。所以对于“默认内核”来说,在隔离环境中运行 Jupyter 服务器仍然会更好。
  • 使用非特权用户在chroot 中运行解释器。不同的实现有不同的“安全”级别。
  • 将 Jython 与 finely tuned permissions 一起使用。
  • 一些奇特的解决方案,如“客户端 JS python 实现”:brython、pyjs

无论如何,即使你设法实现或重用现有的“沙盒”,你仍然会遇到很多潜在的问题:

  • 如果允许多处理或多线程,那么您可能需要监控 CPU 资源的使用情况,因为 一些脚本可能想要使用一切。即使使用 GIL,多线程也可以利用所有内核(用户所要做的就是在线程中调用使用 c 库的函数)
  • 您可能需要监控内存使用情况,因为某些脚本可能会泄漏或只是使用大量内存
  • 其他监控对象:磁盘 IO 使用情况、网络使用情况、打开文件描述符使用情况、执行时间等...
  • 此外,您应该经常检查您的“沙盒解决方案”的安全更新,因为即使是 docker 有时也容易受到攻击,makes it possible to execute code on host machine

推荐阅读:https://softwareengineering.stackexchange.com/questions/191623/best-practices-for-execution-of-untrusted-code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多