黑客 - Python模塊安全權(quán)限
問(wèn)題描述
現(xiàn)在需要開(kāi)發(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)然下劃線開(kāi)頭的私有變量也限制了, 但這種限制對(duì) import abc這種引入方式無(wú)效
相關(guān)文章:
1. javascript - webpack熱加載配置不生效2. javascript - js代碼獲取驗(yàn)證碼倒計(jì)時(shí)問(wèn)題3. node.js - node exec 執(zhí)行沒(méi)反應(yīng)4. 為什么我ping不通我的docker容器呢???5. angular.js - angular內(nèi)容過(guò)長(zhǎng)展開(kāi)收起效果6. 關(guān)于docker下的nginx壓力測(cè)試7. debian - docker依賴的aufs-tools源碼哪里可以找到啊?8. 關(guān)于Java引用傳遞的一個(gè)困惑?9. windows2003下的apache響應(yīng)時(shí)間特別長(zhǎng)?10. node.js - nodejs+express+vue
