繁体   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