当前位置: 首页 > 编程语言 > C#

如何保护dll函数不被我的应用程序使用?分享

时间:2023-04-10 18:13:47 C#

如何保护dll函数不被我的应用程序使用?我想限制其他应用程序使用我写的dll函数。例如。如果我有data.dll包含两个函数。publicvoidInsertInToDatabse();publicvoidClearDatabase();现在,如果我的应用程序调用了InsertInToDatabse()并正在执行其他工作,那么如果其他应用程序通过引用database.dll调用ClearDatabase(),则该数据库将被排除在外。那么如何限制第三方应用程序对这些函数的调用呢?如果您的dll是一个类库,那么实际的配置文件将是其中一个客户端应用程序(web.config或app.exe.config),并且只有授权的应用程序才会具有相同的正确连接字符串名称。现在,即使未经授权的应用程序被阻止以您正在寻找的方式调用dll的方法,如果这些不良应用程序通过知道连接字符串直接访问数据库,它们仍然会把事情搞砸。这可以说,实际上只要配置在你的dll之外你就没有什么可担心的,因为只有授权的应用程序才能访问正确的数据库。如果这个方法还是不能满足你,那么你应该使用像CAS这样的安全检查,它允许你指定哪个类或程序集可以调用某个方法,所以即使你的dll被另一个应用程序引用它也不起作用.请注意,在.NET4中(您在问题中对其进行了标记)整个安全层已发生变化,并且与旧版.NETFramework的工作方式不同,请查看本文以获取更多详细信息:http://msdn.microsoft。com/en-us/library/dd233103.aspx你不能阻止人们调用你的函数,但你可以自由地实现你的函数来防止这种情况发生。例如,您可以锁定数据库访问,以便调用阻塞,直到上一个调用完成,或者您可能有一个标志,使Clear()调用立即返回错误代码或异常。编辑:我可能误解了这个问题。如果您从不希望第三方代码调用您的函数,请按照Marcus的建议使用internals(和/或InternalsVisibleTo)。正如Marcus所说,您可以使用internal关键字。然后将InternalsVisibleToAttribute与应用程序程序集的程序集名称和公钥一起应用于您的类库(如果您使用的是强程序集名称)。MSDN链接如果我没记错的话,internal关键字适用于这些类型的情况。编辑:如评论中所述,如果类A在程序集B中,则程序集D中的类C将无法访问A此外,正如其他答案中指出的那样,您可以(并且可能应该)使用某种形式的身份验证。编辑2:我突然意识到这些权限应该在数据库级别,这意味着如果以下用户(具有这些权限):A:Insert,Update,Create尝试DropTable,然后应用程序抛出异常(或者你handletheerror),这显然会阻止他们这样做。这并不是说您不应该将ClearDatabase()设为内部,但如果用户(第三方正在使用)具有DropTable权限,那么他/她无论如何都会没事的。编辑3:问题不在于如何保护您的代码,问题在于如何保护您的数据库。–Huusom您可以对要保护的方法(而不是公共方法)使用内部访问,然后将项目标记为“好友程序集”。这与允许单元测试项目访问内部方法的方式相同。以下是MSDN的FriendAssemblies文章中的描述...只有您明确指定为好友的程序集才能访问Friend(VisualBasic)或内部(C#)类型和成员。例如,如果程序集B是程序集A的友元,并且程序集C引用程序集B,则C无法访问A中的Friend(VisualBasic)或内部(C#)类型。如果您询问安全性:另一种技术是让客户端传入一个参数,例如密码或加密的连接字符串。如果您要求通过缓存进行限制(例如,只允许每分钟调用一次此方法)-请参阅[AspNetCacheProfile]获取服务或Cache.Insert获取应用程序代码。以上是C#学习教程:如何保护dll函数不被我的应用程序使用?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: