黑客 - Python模塊安全權(quán)限
問題描述
現(xiàn)在需要開發(fā)一個(gè)插件系統(tǒng)。 插件系統(tǒng)所有人都可以編寫PY文件即可加載。但是需要引入主程序的庫 比如
# test.pyfrom lib.function import *...
如何防止用戶訪問lib里面的其他方法或者變量呢?
all 如果加上名稱,我主程序需要調(diào)用所有*的話,可以嗎?
問題解答
回答1:在python并沒有真正的私有變量或者方法, 所以基本上是無法阻止別人訪問另一個(gè)模塊的方法或者變量, 但是如果用戶是通過from lib.function import *, 那么我們可以通過__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的輸出, 并沒有bar和baz, 所以我們可以通過這種方式, 來做一個(gè)簡(jiǎn)單的控制, 當(dāng)然下劃線開頭的私有變量也限制了, 但這種限制對(duì) import abc這種引入方式無效
相關(guān)文章:
1. mysql儲(chǔ)存json錯(cuò)誤2. 在mybatis使用mysql的ON DUPLICATE KEY UPDATE語法實(shí)現(xiàn)存在即更新應(yīng)該使用哪個(gè)標(biāo)簽?3. 哭遼 求大佬解答 控制器的join方法怎么轉(zhuǎn)模型方法4. 怎么php怎么通過數(shù)組顯示sql查詢結(jié)果呢,查詢結(jié)果有多條,如圖。5. sql語句 - 如何在mysql中批量添加用戶?6. mysql - 表名稱前綴到底有啥用?7. mysql - 怎么生成這個(gè)sql表?8. Navicat for mysql 中以json格式儲(chǔ)存的數(shù)據(jù)存在大量反斜杠,如何去除?9. 編輯成功不顯示彈窗10. mysql - 數(shù)據(jù)庫表中,兩個(gè)表互為外鍵參考如何解決
