我正在研究一個允許用戶在我們的系統上運行其代碼的系統。雖然他們的代碼是沙盒,但我仍然想知道他們的代碼是否使用某些語句,特別是導入。這用於快速檢查惡意代碼或代碼是否違反平臺的指導原則,它不會是唯一的檢查,因爲代碼稍後也會被人類檢查,但是自動篩選出最壞的情況會更可取。檢查某些語句的Python代碼
那麼最好的方法是什麼,而不執行代碼來檢查他們的代碼是否導入sys
(或sys
的一部分)?我希望有一個更好/更好的方法,然後正則表達式 - 搜索代碼。
獎金問題:更復雜的陳述呢?例如從模塊bar
調用foo
?
編輯:這不是一個關於安全性的問題。這是關於在代碼中查找某些語句的。看到我的評論。這個用戶代碼只會在用戶沙箱內運行,所以他們可以毀掉他們自己的沙箱。但是,如果他們的代碼獲得'認證',它可以在其他用戶沙箱中運行,在獲得認證之前需要檢查它們。如果自動檢查可以發現最嚴重的違規行爲,那將會有所幫助。
人類需要做一個非常全面的檢查。例如,通過使用'exec'命令,可以找到在此實現的任何簡單系統的解決方法。 – Oliver
我可能是錯的,但我想不出除掃描源文件爲文本文件之外的任何其他方法:如果您讓python解釋器執行它們,您將無法在導入語句和模塊之前自行查詢代碼,級別的功能已經執行......但也許我缺少部分問題? – mac
@Oliver ...仍然...即使人類可能會遇到麻煩,如果代碼被模糊處理(例如酸洗/壓縮/ rot13's等) – mac