mat*_*pop 5 javascript security android ios cordova
有没有办法,只使用JavaScript(客户端),以确保HTTP请求实际来自我的Phonegap应用程序?
请注意:我不是在谈论对用户进行身份验证,而是在某种意义上说,是关于对应用程序本身进行身份验证.没有(也不一定是)与此相关的任何类型的用户交互.
甚至没有谈论通信的机密性(我没有使用HTTPS,有效载荷没有加密).
我的猜测是,最终,这不可避免地需要某种硬编码密钥.
问题是,正如你在这里看到的那样,几乎任何人都可以访问这样的密钥 - 这个问题不仅出现在Javascript资产上,还出现在Android中的Java中.
如果没有办法使用Phonegap或任何Cordova插件,你能否建议一个可以使这个东西成为可能的等效框架(或像Icenium这样的环境)?
或者,最后,如果不对上述情况采取这种预防措施,是否会有任何实际风险?
编辑:Kurt Du Bois提醒我,我没有提到SSL客户端身份验证.无论是否适用/方便,它总是会导致保密私钥的问题.我觉得这是很好的描述在这里,并在句总结:"该键尚未导出的保证是唯一的密钥存储本身一样强烈".
应用程序是一个软件,而不是一个有形的对象.验证它的唯一方法是,如果该软件包含某种秘密.从服务器验证客户端,您请求客户端证明它知道该秘密.
如果您允许任何人下载您的应用程序,那么它包含的任何数据都不是秘密.因此您无法验证您的应用程序.
你可以做的是用混淆技术使秘密难以提取.正确的混淆是非常困难的 - 如果他们有任何好处,可以为你的开发工作增加人工月数.如果你仍然可以使用调试器,那你就错了.混淆错误意味着浪费精力.模糊的努力意味着为某人提取数天或数周的工作来提取秘密.你需要问问自己这是否真的值得.从根本上说,混淆是把钥匙藏在门垫下面.如果你感觉很花哨,或者在花盆后面.
另请参阅安全堆栈交换的一些类似问题:如何为应用程序存储专用RSA密钥?; 在应用程序二进制中存储私有非对称密钥?
要做到这一点,您需要从运行应用程序的意义开始.事实证明这是非常重要的,但我不会让每个人都讨论它.
如果运行你的应用程序意味着参与一些与你想要的行为相同的行为(黑盒定义),你可以通过在客户端上进行"阴影"计算(间歇或不断地)并检查结果来部分解决这个问题,给出相同的输入.甚至不要考虑为密码学做这样的事情,但它对于像游戏这样的东西来说相当不错,你可以根据用户输入定期审核客户端的行为.
您还可以将奇怪的行为引入应用程序(例如在游戏中创建不可见的精灵,如果客户端进行交互,则表示修改后的客户端).
在游戏反作弊世界中已经做了很多关于此类事情的工作,并非所有这些都涉及检查环境.
Atu*_*td. -4
在许多垂直行业中,严格的安全要求非常普遍。我发现如果不遵循适当的指导原则,Android 应用程序很容易受到威胁。为了确保可靠的安全机制并完全控制安全性,我在项目中做了以下工作。
着手保护 HTML5 范例中的应用程序。我已经做了以下工作。
将 html 和 javascript 编码在单独的文件中。我们确保 html 代码不会嵌入 javascript。(至少不会有敏感的java脚本)
编写了一个外部java程序来用复杂的密钥加密所有的javascript文件。(我使用SHA2算法)。在发布到生产环境中,加密的 JavaScript 包含在 Asset 文件夹中。
创建了一个基于 JNI 的程序,将密钥存储在变量中,并提供了检索该密钥的方法。
在 Native Android 中编写方便的方法来执行以下操作
严格遵循编码标准。
通过加密 HTML,然后在 JNI 中转移解密机制,可以进一步加强安全性。
我的应用程序已经通过上述方法的严格安全评估。
简而言之,我没有依赖任何框架,而是自己开发了一个小框架,我对其有100%的控制权。正确理解设计并且开发人员接受了几次培训后,没过多久。
Android 团队和 IOS 团队并行工作,以确保两个平台的本机部分编码得到照顾。在IOS上,我们不需要使用加密和解密来通过客户端的安全合规测试。
第一个应用程序的开发时间稍长,但一旦框架就位,下一个应用程序只需编写 html 和 javascript 代码,并在生产前遵循正确的发布流程即可。
| 归档时间: |
|
| 查看次数: |
797 次 |
| 最近记录: |