- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道将带有凭据,API-Key等的数据库连接字符串放进去真的很糟糕,因为您可以反编译它以查看值...
那么,doe的一切都需要在API后面吗?
例如,实际需要放在Web服务后面的内容:
是否需要将SQL查询放在Web服务后面,还是可以对存储过程进行参数化查询,这样就可以了吗?我假设这也需要在Web服务之后,并且只返回JSON数组等内容。
我真的没有看到关于不应该为移动应用程序提供网络服务的任何内容的清单。
我来自Web开发职位,因此到目前为止,这并不是真正的问题。
我们是否基本上需要通过Web服务来运行我们的应用程序,如果是这样,我们如何将Web Service与该应用程序合并,因为我们一开始就无法对Web服务的密钥进行硬编码?
摘要:
为了在数据库和android app客户端之间进行交换,我们是否需要创建一个全面的Web服务,对于任何第三方API来说都是一样的吗?
另外,由于此Web服务的目的是从一开始就防止硬编码密钥,因此我们如何授权android应用与我们的Web服务交互?
最佳答案
我知道将带有凭据,API-Key等的数据库连接字符串放进去真的很糟糕,因为您可以反编译它以查看值...
是的,这对于任何类型的应用程序都是非常糟糕的,无论是移动应用程序,Web应用程序还是物联网应用程序。
那么,doe的一切都需要在API后面吗?
是的,您的应用程序需要尽可能的简单。换句话说,您的应用程序中的代码应仅尽可能地与表示有关,任何业务逻辑都应委派给API服务器。这种方法的巨大优势在于,只要您遇到错误,就只需要更新API服务器,而无需更新应用程序本身,然后等待所有客户端在其移动设备中对其进行更新。对于Web应用程序,您不想向在浏览器中按F12键并开始在开发人员工具面板中调试代码的任何人透露您的业务逻辑。
是否需要将SQL查询放在Web服务后面,还是可以对存储过程进行参数化查询,这样就可以了吗?
正如我之前所说,APP必须尽可能地愚蠢,并且永远不要从客户端向任何类型的后端执行SQL查询,否则您的服务将面临巨大的安全漏洞。
从客户端到后端的任何东西都必须被视为潜在恶意,因为即使您认为自己知道世卫组织正在提出该请求,也可能不知道是由谁做出的。为了更好地了解WHO和访问服务器之间的区别,请阅读此图片所在部分中的this article:
简而言之,WHO表示用户,WHO表示正在执行请求的应用程序/设备,如图所示,攻击者可能会利用中间人攻击来篡改它。
我假设这也需要在Web服务之后,并且只返回JSON数组等内容。
Json是最常用的从API返回响应的格式,因为它很容易被人和机器读取,但是还存在其他格式。
我真的没有看到关于不应该为移动应用程序提供网络服务的任何内容的清单。
虽然要求的列表可能不存在,但由于范围太广,您可以从在移动应用程序中避免OWASP Mobile Security Project - Top 10 risks开始。
我来自Web开发职位,因此到目前为止,这并不是真正的问题。
尽管您可能未在Web应用程序中使用API密钥,但是如果您从它们中进行SQL查询,则您将面临SQL注入的风险,这是暴露于Internet的任何应用程序中最常见的风险,这种风险仍然存在。在OWASP Top 10 - 2017(pdf)的第一位置。
我们是否基本上需要通过网络服务运行我们的应用程序
是的,您需要通过API服务器运行移动应用。
如果是的话,我们该如何将Web服务与应用程序合并,因为我们一开始就无法对Web服务的密钥进行硬编码?
正如我在文章How to Extract an API Key from a Mobile App by Static binary analysis中所演示的那样,可以借助几种开源工具(例如,使用Mobile Security Framework)将其提取,但是您也可以使用MitM攻击来获取API密钥,如我在文章< aa>,使用开源工具Steal that API Key with a Man in the Middle Attack。
那么现在该怎么办...如果我使用一个API密钥,则可以将其提取,但是如果我不使用它,则无法确定发出请求的原因。
您现在可以诉诸于采用多个防御层,从MiTM Proxy开始,然后是reCaptcha V3(WAF),最后如果您可以负担得起Web Application Firewall(UBA)解决方案,则可以采用。
Google User Behavior Analytics:
reCAPTCHA是一项免费服务,可保护您的网站免受垃圾邮件和滥用的侵害。 reCAPTCHA使用高级风险分析引擎和适应性挑战,以防止自动化软件参与您网站上的滥用行为。这样做是为了让您的有效用户轻松通过。
...可帮助您检测网站上的滥用流量,而不会引起用户的摩擦。它会根据与您网站的互动情况返回得分,并为您提供更大的灵活性以采取适当的措施。
reCAPTCHA V3:
Web应用程序防火墙(或WAF)过滤,监视和阻止与Web应用程序之间的HTTP通信。 WAF与常规防火墙的区别在于,WAF能够过滤特定Web应用程序的内容,而常规防火墙充当服务器之间的安全门。通过检查HTTP流量,它可以防止Web应用程序安全漏洞(例如SQL注入,跨站点脚本(XSS),文件包含和安全性错误配置)引起的攻击。
WAF - Web Application Firewall:
Gartner定义的用户行为分析(UBA)是一个有关检测内部威胁,针对性攻击和财务欺诈的网络安全流程。 UBA解决方案着眼于人类行为模式,然后应用算法和统计分析从这些模式中检测出有意义的异常,即表明潜在威胁的异常。 UBA不会跟踪设备或安全事件,而是跟踪系统的用户。像Apache Hadoop这样的大数据平台通过允许它们分析PB级的数据来检测内部威胁和高级持久威胁,正在增强UBA功能。
所有这些解决方案都基于否定性识别模型,换句话说,他们通过识别出什么不好而不是什么好来尽最大的努力来区分好与坏,因此尽管使用了先进的技术,但它们还是容易出现误报的情况他们中的一些人,例如机器学习和人工智能。
因此,您可能经常会发现自己不必放松放松如何阻止对API服务器的访问,以免影响良好的用户。这也意味着该解决方案需要不断监控,以确认误报不会阻止您的合法用户,同时他们会适当地阻止未经授权的用户。
关于为移动应用程序提供服务的API,可以通过使用移动应用程序证明解决方案来使用肯定的识别模型,该解决方案向API服务器保证可以信任请求,而不会产生误报。
行动应用程式证明
使用移动应用证明解决方案可以使API服务器知道正在接收的只是来自真正移动应用的请求。
移动应用程序证明服务的作用是在运行时通过在后台运行将与云中运行的服务进行通信的SDK来确保您的移动应用程序未被篡改或不在根设备中运行,以确保移动应用程序和设备的完整性正在运行。
在成功证明移动应用程序完整性后,将发布并签名一个短时生存的JWT令牌,并秘密告知只有云中的API服务器和移动应用程序证明服务。如果移动应用程序证明失败,那么将使用API服务器不知道的秘密对JWT令牌进行签名。
现在,应用程序必须与每个API一起发送,并在请求的标头中调用JWT令牌。这将允许API服务器仅在它可以验证JWT令牌中的签名和到期时间时才服务请求,而在验证失败时拒绝它们。
一旦移动应用程序不知道移动应用程序证明服务使用的机密,就无法在运行时对其进行反向工程,即使该应用程序被篡改,在有根设备中运行或通过正在作为连接的连接进行通信中间攻击中一名男子的目标。
移动应用证明服务已经作为Approov的SAAS解决方案存在(我在这里工作),该服务提供了多个平台的SDK,包括iOS,Android,React Native等。集成还需要在API服务器代码中进行少量检查,以验证由云服务发出的JWT令牌。 API服务器必须能够执行此检查,才能决定服务哪些请求和拒绝哪些请求。
回复您的摘要
为了在数据库和android app客户端之间进行交换,我们是否需要创建一个全面的Web服务,对于任何第三方API来说都是一样的吗?
是的,您应该始终将访问权委托给任何类型的应用程序,移动设备,Web或IOT应用程序中的第三方服务,否则当攻击者获取凭据以开始使用它们并代表您使用它们时,您将遇到麻烦您将成为支付账单的人。
另外,由于此Web服务的目的是从一开始就防止硬编码密钥,因此我们如何授权android应用与我们的Web服务交互?
移动应用证明解决方案在这里看起来最合适。
结论
在客户端运行的任何需要秘密访问API的内容都可能以不同的方式被滥用,您必须将对所有第三方API的访问权限委派给您所控制的后端,以便减少攻击面,并减少攻击的可能性。同时保护自己的秘密,以免被公众窥探。
最后,必须根据您要保护的内容的价值以及此类数据的法律要求(例如欧洲的GDPR法规)来选择用于保护API服务器的解决方案。
关于java - 在Android应用程序中不要硬编码的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56718141/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!