2009-09-25 184 views
4

我正在設置一個Web應用程序來使用IronPython來腳本化各種用戶操作,我將公開各種業務對象,以供腳本訪問。我想讓用戶無法導入CLR或其他程序集,以便簡化腳本的功能,並將其限制在我公開的業務對象中。IronPython - 如何防止導入CLR(和其他模塊)

如何防止導入CLR和其他程序集/模塊?

+0

不錯的問題!你很難分析用戶代碼並驗證它嗎? – Zote 2009-09-25 20:36:20

回答

1

您必須在腳本中搜索您不希望它們使用的導入腳本,並在其中包含任何腳本的情況下拒絕該腳本。

基本上,只要拒絕腳本,如果它包含Assembly.Load,import或AddReference。

+0

我拿它,然後我不能設置一個選項來做到這一點。沒問題,我可以解析代碼,這樣做似乎有點粘。 – 2009-09-26 15:55:03

0

如果你想禁用某些內置模塊,我會建議通過ironpython.codeplex.com提交一個功能請求。這應該是一個很容易實現的事情。

否則,您只需查看Importer.cs並禁止導入,或者您可以簡單地從IronPython中刪除ClrModule.cs並重新構建(並可能刪除對它的任何引用)。

1

您可能想要使用Microsoft's Code Access Security來實施保護。我自己並沒有完全意識到它的工作原理(或者如何使它與IPy協同工作),但是我覺得你應該考慮它。

有一個discussion thread on the IPy mailing list你可能想看看。問的問題與你的相似。

+0

如果您有嚴格的安全要求,這是正確的方法。 – 2011-12-07 03:17:07

2

這會阻止導入python模塊和.Net對象,因此可能不是您想要的。 (我對Python比較陌生,所以我可能會錯過一些東西):

設置環境。 導入您需要的用戶有權訪問的任何內容。 無論是在前面加上自己的腳本或執行:

__builtins__.__import__ = None #Stops imports working 
reload = None #Stops reloading working (specifically stops them reloading builtins 
       #giving back an unbroken __import___! 

然後執行自己的腳本。