黑客 - Python模塊安全權(quán)限
問(wèn)題描述
現(xiàn)在需要開(kāi)發(fā)一個(gè)插件系統(tǒng)。 插件系統(tǒng)所有人都可以編寫(xiě)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. html5 - datatables 加載不出來(lái)數(shù)據(jù)。2. node.js - mongodb查找子對(duì)象的名稱為某個(gè)值的對(duì)象的方法3. 測(cè)試自動(dòng)化html元素選擇器元素ID或DataAttribute [關(guān)閉]4. html5和Flash對(duì)抗是什么情況?5. 利用IPMI遠(yuǎn)程安裝centos報(bào)錯(cuò)!6. javascript - QQ第三方登錄的問(wèn)題7. 在mac下出現(xiàn)了兩個(gè)docker環(huán)境8. 運(yùn)行python程序時(shí)出現(xiàn)“應(yīng)用程序發(fā)生異常”的內(nèi)存錯(cuò)誤?9. spring-mvc - spring-session-redis HttpSessionListener失效10. 正在使用electron和node.js做桌面應(yīng)用,需要實(shí)時(shí)監(jiān)聽(tīng)是否有網(wǎng)絡(luò)連接,node或者electron是否可以做到

網(wǎng)公網(wǎng)安備