Ale*_*iad 13 c# reflection code-security
我正在为我正在教授的课程实施一个自动"评估员".总的想法是每个学生都提供了一些DLL,并实现了一些算法.我的评估者使用Reflection加载所有这些DLL,找到学生实现并在锦标赛中评估它们.所有这些算法都是黑盒优化器,它们实现了以下接口
public interface IContinuousMetaheuristic
{
// ... Some unimportant properties
Vector Evaluate(Function function, int maxEvaluations, ...);
}
Run Code Online (Sandbox Code Playgroud)
Function
(至少相关部分)的类定义是:
public class Function:
{
private Vector xopt; // The optimum point
private double fopt; // The optimum value
public double Evaluate(Vector x);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我需要将一个Function
实例传递给这些元启发式.这些功能由我自己实现.其中大多数在某种意义上是随机的,也就是说,我在函数构造函数中选择一个随机最优点.这就是为什么你可以xopt
在课堂上看到一个字段.问题是,我不希望我的学生能够通过反射或任何其他技术访问xopt
或fopt
领域,因为这将是作弊,或至少,如果他们这样做,所以我可以相应地惩罚他们;) .
因此,一般的问题是:是否有任何方法可以禁止在我动态加载的代码中使用Reflection,或者在任何其他意义上禁止此代码访问私有字段(作弊).
提前致谢.
他们给你源代码吗?编写一个单独的工具来查找“using System.Reflection”和“System.Reflection”。在源中。如果他们想出一个聪明的技巧来避免这种情况,也许他们应该通过作弊获得额外的分数。:)
另外,他们使用的代码中的这一点又如何:
private double FakeOptimumPointWithAConvincingName{ get { return 12.07; } }
Run Code Online (Sandbox Code Playgroud)
然后在运行评估器时将其更改为:
private double FakeOptimumPointWithAConvincingName{ get { throw new SomeoneCheatedException(); } }
Run Code Online (Sandbox Code Playgroud)
沿着这条线还有很多其他聪明的事情可以做;重点是你可以使用诡计而不是技术来阻止他们。如果他们想出更好的技巧,那就值得称赞。:)