簡體   English   中英

如何限制某些裝配的反射?

[英]How can I restrict reflection for certain assemblies?

在我的.net應用程序中,我想限制對某些程序集的反射。 我的意思是我希望我的特定程序集只能通過一些預定義的程序集來反映,而不是通過任何其他程序集。 我怎樣才能做到這一點?

編輯:

此工具完全關閉.NET反匯編和程序集的反編譯。 我想允許一些預定義的程序集來反映這個程序集,但是限制其他人這樣做。 我想要一些應該被聲明為匯編的東西,例如,AssemblyOne已經允許你反映我的AssemblyTwo,所以只有AssemblyTwo應該能夠完全信任它,而不是其他人。

您鏈接的工具基本上將整個應用程序編譯為本機代碼。 這並沒有真正“關閉”反射或其他任何東西,它只是將應用程序變成完全不同的東西,它不再是字節碼,而不再是技術上的.NET組件。

具有完全信任的呼叫者始終可以在.NET程序集及其內部的所有內容上使用反射。 除了(a)混淆,任何有足夠的耐心和決心的人都可以去混淆,或者(b)編譯成本機代碼,這會阻止任何形式的反射(以及許多其他有用的功能),你無法防止這種情況發生。發生了,你肯定不能將它限制在特定的程序集。

ReflectionPermissionAttribute ,違背了其他的答案說, 不能防止用戶反映你的代碼的什么人; 相反,它控制該代碼 Reflection API的訪問。 這里不會有任何幫助。

為什么隱藏代碼或類結構如此重要? 除非你是為NSA工作,否則大多數代碼都沒有那么有價值/秘密,而且大多數應用程序在給定足夠的時間和資源的情況下很容易進行逆向工程。 實際上,攻擊者或剽竊者從復制代碼中復制代碼和/或使用Reflection來發現您的API時獲得的收益很少。

我想我只能為自己說話,但是如果有一天免費實現一個很酷的功能或投資試圖保護內部代碼,我會一直致力於實際增加價值的新功能。

如果此人完全信任程序集,則無法阻止他們訪問程序集的任何部分。

http://www.pcreview.co.uk/forums/thread-2196297.php

反思是不可抗拒的! :-)

除了編寫本機代碼之外,我認為你不能阻止反射。 而且,這可以被拆解。 如果您需要在未經授權的人手中保留一些代碼,請將其保存在您控制的服務器上並允許遠程訪問它。

我想知道你想要限制反思的場景是什么。 您是否擔心將一些超級秘密數據暴露在您的代碼庫中? 一些非常聰明的代碼,你有一些優勢嗎?

我問的原因是我只是不相信我們在軟件開發中所做的任何事情本身在代碼庫級別都是如此獨特,以至於它需要人們不去看它 -所以我想知道你是否走錯了路。 既然你沒有提到為什么要阻止反射,我不知道你的場景是否有意義(至少從我的POV)限制訪問。

我無法想象一個現實世界的場景,限制訪問真的會在任何地方得到 - 這不是現在制造系統的任何特定代碼塊的光彩,它是完整的包(UX,客戶服務,快速進化保持)使用速度等)。 如果你的代碼是好的,它會隨着時間的推移而改變,所以任何人“破解”它將比你當前的迭代(至少)落后兩步。 你的價值是你的大腦,而不是大會。

如果你出於安全原因這樣做,那么你真的不應該試圖通過阻止反射來“保護”它。

再一次,你可能有正當理由阻止我沒有想過的反思,但我懷疑這是值得的努力,我傾向於相信你的能量會更好地花在其他地方......就像你編寫代碼一樣想要阻止更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM