如何使 public 静态 class "secure"?
How can I make a public static class "secure"?
我正在寻找使用 public 静态方法为 public class 创建一个安全包装器,所以假设 class 非常简单:
public class MyClass {
public static int Add (int first, int second)
{
return first + second;
}
}
我想让一个客户端需要通过一些安全的其他 class 来访问它,它将调用 MyClass。在一天结束时,我希望将所有这些代码放在一个 dll 中供客户使用。目的是要有一些行为,如:
public class SecureMyClassWrapper
{
bool _isUnlocked;
private static readonly List<string> validIds = new List<string>(){"only me", "and them"};
public SecureMyClassWrapper(string id)
{
if (validIds.Contains(id))
{
_isUnlocked = true;
}
else
{
_isUnlocked = false;
}
}
public int Add(int first, int second)
{
if (_isUnlocked)
{
return MyClass.Add(first, second);
}
else
{
// throw security exception etc.
}
}
}
黑客攻击能力比我强的人很可能会想要获取我的静态方法,所以请有人建议为什么这可能是一个糟糕的方法,或者我应该在这里关注什么?有些想法是
MyClass
方法可以通过反射轻松调用
- 有人可以 ildasm.exe 编写代码,更改
validIds
或 _isUnlocked
逻辑列表(甚至它们在运行时的值?)
- 可以读取一个有效的 ID,然后将其用作自己的
在这些情况下我如何防止反射或反编译?您是否会推荐一种标准方法,例如代码访问安全性?
在另一台机器上的服务 运行 中托管您要保护的代码。并使用接口公开 api。
保护您的 .Net 代码 的唯一方法是使用 Obfuscator。然而,它只做了这么多,所以它仍然可以破解。即使是非 .Net 代码也很容易破解,更改其堆和堆栈等通常是为了绕过商业软件的电子注册过程。
如果您要处理一些非常敏感的代码,您可以随时将其放在云服务器上,但这当然意味着每月费用。在那种情况下,您可能还需要同样昂贵的安全流量 (https)。
最终,在处理代码的安全性时,您必须权衡成本与收益。最好的做法是以开源的方式编写您的代码,并且仍然不会危及您的用户安全或数据。
我正在寻找使用 public 静态方法为 public class 创建一个安全包装器,所以假设 class 非常简单:
public class MyClass {
public static int Add (int first, int second)
{
return first + second;
}
}
我想让一个客户端需要通过一些安全的其他 class 来访问它,它将调用 MyClass。在一天结束时,我希望将所有这些代码放在一个 dll 中供客户使用。目的是要有一些行为,如:
public class SecureMyClassWrapper
{
bool _isUnlocked;
private static readonly List<string> validIds = new List<string>(){"only me", "and them"};
public SecureMyClassWrapper(string id)
{
if (validIds.Contains(id))
{
_isUnlocked = true;
}
else
{
_isUnlocked = false;
}
}
public int Add(int first, int second)
{
if (_isUnlocked)
{
return MyClass.Add(first, second);
}
else
{
// throw security exception etc.
}
}
}
黑客攻击能力比我强的人很可能会想要获取我的静态方法,所以请有人建议为什么这可能是一个糟糕的方法,或者我应该在这里关注什么?有些想法是
MyClass
方法可以通过反射轻松调用- 有人可以 ildasm.exe 编写代码,更改
validIds
或_isUnlocked
逻辑列表(甚至它们在运行时的值?) - 可以读取一个有效的 ID,然后将其用作自己的
在这些情况下我如何防止反射或反编译?您是否会推荐一种标准方法,例如代码访问安全性?
在另一台机器上的服务 运行 中托管您要保护的代码。并使用接口公开 api。
保护您的 .Net 代码 的唯一方法是使用 Obfuscator。然而,它只做了这么多,所以它仍然可以破解。即使是非 .Net 代码也很容易破解,更改其堆和堆栈等通常是为了绕过商业软件的电子注册过程。
如果您要处理一些非常敏感的代码,您可以随时将其放在云服务器上,但这当然意味着每月费用。在那种情况下,您可能还需要同样昂贵的安全流量 (https)。
最终,在处理代码的安全性时,您必须权衡成本与收益。最好的做法是以开源的方式编写您的代码,并且仍然不会危及您的用户安全或数据。