mos*_*ini 18 c# security methods
我正在处理销售点项目,该项目由一家特殊的银行提供给我们公司.银行提供了一个DLL,它通过USB端口与POS交互.我添加了用.NET C#语言编写的DLL,所以没有存在互操作性问题.在DLL内部有一个方法叫做DebitAndShareTheAmount.这个方法有两个主要参数P1,P2.
P1是明文的金额,P2是应该从P1明文中再次减去的金额.所以,如果我打电话DebitAndShare(1000,10);//它实际上是银行信用我的帐户1000-10 = 990 $和商店使用我的应用程序10 $.
问题是,任何具有一些C#编程基础知识和访问该SHOP计算机的人都可以安装Visual Studio并使用该DLL并调用DebitAndShare方法并且您知道其余的.实际上我们的应用程序将充当服务提供者并且可用于在全国各地的特殊商店,商店的所有者将通过我们的应用程序向客户提供服务并支付他们的金额(10美元)来支付.我将与POS开发人员就我刚刚提到的安全问题进行会谈.
我已经阅读了MCTS书和本书的安全部分,我发现如果银行DLL PublisherIdentityPermission(SecurityAction.InheritanceDemand, CertFile=@"SomeCert.cer")在DebitAndShare方法之前使用属性并将此方法标记为受保护,那么我们可以有一个级别的安全性,是吗?你有什么建议.我也认为如果银行可以给我们加密算法方法,那么它也就足够了.
正如评论所表明的,确保这一点您将遇到严重的问题。然而,我想到了一些至少会有所帮助的方法。
走栈。在您的调用站点中,查看当前堆栈,然后返回。如果你看到任何东西不是你所期望的,那么就失败。这并不是万无一失的,但它会阻止那些不熟练和/或可以看到您的源代码的人。
使用 SecureString 和外部秘密。这要求您有某种方法从某处获取安全值。一旦有了它,您就可以加密/签名数据以确保它不被篡改(通过证书或其他机制)。调试器(如 WinDBG)仍然能够破坏它,但不太容易。
用 C++ 重新构建代码。机器代码更难找到,但这仍然阻止不了了解 Windows 内部原理的人。
您可以采取多种措施,然后像银行那样做,而不是试图通过保护您的应用程序来清空海洋。寻找没有意义的模式。如果特定 POS 通常生成 100 左右的值,那么当您看到大订单或小订单时,请将其标记为供审核。交易量突然增加?一样。
除了技术解决方案之外,您最好的选择(恕我直言)是确保商店部分陷入欺诈行为。在线上的金钱使人们更加小心谁可以访问计算机。
埃里克