- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我阅读 Stack Overflow 已经有一段时间了,但这是我发布的第一个问题。
我有这个用 C# 编写的跟踪程序,它收集有关本地计算机使用情况的信息并将它们发送到服务器。数据为 XML 格式,每约 10 分钟发送一次。
我的问题:无论我如何加密 XML 数据(无论是对称的还是非对称的),总有人可以反编译我的 C# 跟踪程序,找出我使用的 key /证书/加密约定,然后编写另一个发送虚假报告的程序到服务器。
跟踪程序的运行假设运行它的用户可能对发送虚假报告感兴趣。
问题:1)我如何确保(尽可能确定)数据是从真实跟踪器而不是克隆/伪造者发送的?2) 我怎样才能将代码混淆得足够严重以至于恢复 key /证书/加密约定变得 hell /几乎不可能?
我想在解决方案上花很少的钱,或者最好不花钱(所以 500 美元的混淆器是不可能的。我是一名大学生,而且我很便宜 :)
提前致谢。
最佳答案
作为Raph Koster once put it , 写关于在客户端-服务器在线游戏中对抗黑客的战斗,
Never trust the client. Never put anything on the client. The client is in the hands of the enemy. Never ever ever forget this.
不幸的是,对于几乎所有需要使用客户端处理能力的真实世界应用程序,某些东西 必须放在客户端上,因此恶意攻击者可以使用。与任何安全措施一样,必须要问的问题是您准备花多少时间和金钱来降低这种风险?
有些人喜欢向询问混淆或客户端许可机制的人指出,“哦,没有意义,它最终会被打破”。但这没有捕获要点:此类措施的目的是将“最终”推向更远的 future ,以至于对于没有足够决心的攻击者来说,这将是“永远不会”。
例如:如果您的应用程序通过纯文本电子邮件发送数据,那么几乎可以击败零个攻击者。用 rot13 电子邮件发送它可能会击败 5% 的攻击者。使用用户名作为 key 加密发送它会失败更多。使用免费的混淆器混淆发送代码会失败更多。使用商业级混淆器进行混淆会打败更多。正如人们喜欢说的那样,要求每个客户端都有一个硬件加密狗会打败“除了最坚定的”攻击者之外的所有攻击者 - 但这可能是无法忍受的成本。
从“我是一名大学生”开始,我猜这不是有史以来最敏感的项目。使用免费的混淆器并使用一些用户特定的信息作为 key 来加密发送的数据。可能就可以了。
关于c# - 我怎样才能确保有人没有发送虚假数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3200088/
我试图弄清楚接受 OpenID 登录的网站如何无法通过简单的主机文件更新来指向伪造的 OpenID 提供商。 假设我想侵入 Joe Smith 的帐户,在这个例子中,假设他的 OpenID 提供商是
#include #include #include #include #include #include #include #include #include #include #define P
根据此讨论 - "RESTful API - Correct behavior when spurious/not requested parameters are passed in the req
如果编译为 Cand C++ 源代码,这个简单的代码片段会使用 g++ 4.7.0 生成“函数调用中缺少标记”警告。我相信这是编译器的错误,因为最终的 NULL值(value)就在那里。 #inclu
我读到,有时 && 运算符用于“短路”JavaScript,使其相信返回值 0 是 0 而不是 NaN,因为 0 在 JavaScript 中是一个虚假数字。我一直在四处寻找,想弄清楚这一切意味着什么
我正在使用 Borland(又名“Embarcodegearland”)C++Builder 2007 编译器,它有一个小错误,系统头文件中的某些 static const 项可能导致虚假的 "xyz
我是一名优秀的程序员,十分优秀!