黑客 - Python模塊安全權(quán)限
問(wèn)題描述
現(xiàn)在需要開發(fā)一個(gè)插件系統(tǒng)。 插件系統(tǒng)所有人都可以編寫PY文件即可加載。但是需要引入主程序的庫(kù) 比如
# test.pyfrom lib.function import *...
如何防止用戶訪問(wèn)lib里面的其他方法或者變量呢?
all 如果加上名稱,我主程序需要調(diào)用所有*的話,可以嗎?
問(wèn)題解答
回答1:在python并沒(méi)有真正的私有變量或者方法, 所以基本上是無(wú)法阻止別人訪問(wèn)另一個(gè)模塊的方法或者變量, 但是如果用戶是通過(guò)from lib.function import *, 那么我們可以通過(guò)__all__屬性去設(shè)置*能被import指定的變量或方法, 例如:
cat abc.py__all__ = [’bar’]waz = 5bar = 10def baz(): return ’baz’cat b2.pyfrom abc import *print(dir())# 輸出:[’__builtins__’, ’__doc__’, ’__file__’, ’__name__’, ’__package__’, ’bar’]
可以看到在b2.py的輸出, 并沒(méi)有bar和baz, 所以我們可以通過(guò)這種方式, 來(lái)做一個(gè)簡(jiǎn)單的控制, 當(dāng)然下劃線開頭的私有變量也限制了, 但這種限制對(duì) import abc這種引入方式無(wú)效
相關(guān)文章:
1. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問(wèn)題2. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.3. javascript - 請(qǐng)教空白文本節(jié)點(diǎn)的問(wèn)題4. javascript - 用js實(shí)現(xiàn)遠(yuǎn)程js調(diào)用時(shí)出現(xiàn)時(shí)間機(jī)制問(wèn)題怎樣解決?5. 刷新頁(yè)面出現(xiàn)彈框6. javascript - 前端開發(fā) 本地靜態(tài)文件頻繁修改,預(yù)覽時(shí)的緩存怎么解決?7. ios - 類似微博首頁(yè),一張圖的時(shí)候是如何確定圖大小的?8. java報(bào)錯(cuò)Communications link failure 該如何解決?9. javascript - 怎么看網(wǎng)站用了什么技術(shù)框架?10. PC 手機(jī)兼容的 編輯器
