首頁  >  問答  >  主體

駭客 - Python模組安全權限

現在需要開發一個外掛系統。插件系統所有人都可以寫PY檔案即可載入。但是需要引入主程式的庫 例如

# test.py
from lib.function import *
...

如何防止使用者存取lib裡面的其他方法或變數呢?

all 如果加上名稱,我主程式需要呼叫所有*的話,可以嗎?

伊谢尔伦伊谢尔伦2686 天前645

全部回覆(1)我來回復

  • 欧阳克

    欧阳克2017-06-12 09:27:57

    python並沒有真正的私有變數或方法, 所以基本上是無法阻止別人存取另一個模組的方法或變數, 但是如果使用者是透過from lib.function import *, 那麼我們可以透過__all__ 屬性去設定*能被import指定的變數或方法, 例如:

    cat abc.py
    __all__ = ['bar']
    waz = 5
    bar = 10
    def baz(): return 'baz'
    
    cat b2.py
    from abc import *
    print(dir())
    
    # 输出:
    ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'bar']

    可以看到在b2.py的輸出, 並沒有barbaz, 所以我們可以通過這種方式, 來做一個簡單的控制, 當然下劃線開頭的私有變量也限制了, 但這種限制對import abc這種引入方式無效

    回覆
    0
  • 取消回覆