基于pythonweb的解释器安全问题
我正在制作一个基于web的python解释器,它将在基于Linux的python 3解释器上执行代码,并在同一网页上给出输出。但这有一些严重的循环漏洞,比如有人可以使用python的基于pythonweb的解释器安全问题,python,linux,bash,security,Python,Linux,Bash,Security,我正在制作一个基于web的python解释器,它将在基于Linux的python 3解释器上执行代码,并在同一网页上给出输出。但这有一些严重的循环漏洞,比如有人可以使用python的os模块执行bash脚本,可以检查web应用程序的源代码目录等等 有人能建议我如何在我的应用程序中避免此类意外吗 关于简短的回答:没有简单的“仅python”解决方案 一些细节: 用户总是可以尝试调用os,sys,,将open(敏感路径,'rw')作为f:…等,并且很难通过分析代码来检测所有这些情况 如果您允许任何
os
模块执行bash脚本,可以检查web应用程序的源代码目录等等
有人能建议我如何在我的应用程序中避免此类意外吗
关于简短的回答:没有简单的“仅python”解决方案 一些细节:
- 用户总是可以尝试调用
,os
,sys
等,并且很难通过分析代码来检测所有这些情况,将open(敏感路径,'rw')作为f:…
- 如果您允许任何第三方,那么事情就变得更加复杂了,例如,一些第三方软件包可能会在本地创建一个别名到
(os.execv
),然后就可以从第三方编写类似os_ex=os.execv
的脚本;os_ex(…)
- 在非特权docker容器中运行解释器。例如:
- 将不受信任的脚本写入将通过docker容器中的卷公开的文件
- 在docker中执行该脚本:
a
b<代码>子流程调用(['docker'、'exec'、'CONTAINER_ID'、'/usr/bin/python'、'-c',UNTRUSTED_SCRIPT_TEXT])subprocess.call(['docker','exec','CONTAINER_ID','/usr/bin/python','PATH_TO_SCRIPT'])
- 使用PyPy-s
- 搜索一些“安全的”。或注意:现有内核不保证安全,可能允许调用
、子进程。请检查\u output
和其他。所以对于“默认内核”,最好在隔离环境中运行Jupyter服务器os.rm
- 使用非特权用户在中运行解释器。不同的实现具有不同的“安全”级别
- 使用Jython和
- 一些奇特的解决方案,如“客户端JS python实现”:
- 如果允许多处理或多线程,那么您可能希望监视CPU资源的利用情况,因为 有些脚本可能希望使用所有内容。即使使用GIL,多线程也可以利用所有内核(用户所要做的就是调用线程中使用c库的函数)
- 您可能希望监视内存使用情况,因为某些脚本可能会泄漏或只是占用大量内存
- 监视的其他候选对象:磁盘IO使用情况、网络使用情况、打开的文件描述符使用情况、执行时间等
- 此外,您还应该始终检查“沙箱解决方案”的安全更新,因为即使是docker有时也容易受到攻击和攻击
推荐阅读:简短回答:没有简单的“仅python”解决方案 一些细节:
- 用户总是可以尝试调用
,os
,sys
等,并且很难通过分析代码来检测所有这些情况,将open(敏感路径,'rw')作为f:…
- 如果您允许任何第三方,那么事情就变得更加复杂了,例如,一些第三方软件包可能会在本地创建一个别名到
(os.execv
),然后就可以从第三方编写类似os_ex=os.execv
的脚本;os_ex(…)
- 在非特权docker容器中运行解释器。例如:
- 将不受信任的脚本写入将通过docker容器中的卷公开的文件
- 在docker中执行该脚本:
a
b<代码>子流程调用(['docker'、'exec'、'CONTAINER_ID'、'/usr/bin/python'、'-c',UNTRUSTED_SCRIPT_TEXT])subprocess.call(['docker','exec','CONTAINER_ID','/usr/bin/python','PATH_TO_SCRIPT'])
- 使用PyPy-s
- 搜索一些“安全的”。或注意:现有内核不保证安全,可能允许调用
、子进程。请检查\u output
和其他。所以对于“默认内核”,最好在隔离环境中运行Jupyter服务器os.rm
- 使用非特权用户在中运行解释器。不同的实现具有不同的“安全”级别
- 使用Jython和
- 一些奇特的解决方案,如“客户端JS python实现”:
- 如果允许多处理或多线程,那么您可能希望监视CPU资源的利用情况,因为 有些脚本可能希望使用所有内容。即使使用GIL,多线程也可以利用所有内核(用户所要做的就是调用线程中使用c库的函数)
- 您可能希望监视内存使用情况,因为某些脚本可能会泄漏或只是占用大量内存
- 监视的其他候选对象:磁盘IO使用情况、网络使用情况、打开的文件描述符使用情况、执行时间等
- 此外,您还应该始终检查“沙箱解决方案”的安全更新,因为即使是docker有时也容易受到攻击和攻击
建议阅读:您需要对用户输入进行消毒。这是一个广泛问题的广泛答案。它被称为沙箱。谷歌搜索“Python沙盒”应该有一堆好东西suggestions@thatotherguy这就是我想要的,因为你需要对用户输入进行消毒。这是对广义q的广义回答