Android开发规范:App安全规范

如果组件没有包含过滤器intent-filter,那么android:exported属性的值默认是false;如果组件包含了至少一个intent-filter,那么android:exported属性的值默认就是true。

如果必须暴露这些组件,那么需要添加自定义的permission权限来进行访问控制。

<activity

android:name=“com.androidwind.safe.DemoActivity”

android:exported=“true”

android:label=“@string/app_name”

android:permission=“com.androidwind.permission.demoPermission” >

外部应用如果想直接打开DemoActivity,需要在AndroidManifest.xml配置:

webview

=================================================================

由于WebView在低系统版本中存在远程代码执行漏洞,如JavascriptInterface,中间人可以利用此漏洞执行任意代码。

所以app的targetSdkVersion需要大于17,也就是Android版本至少要4.2。

另外需要注意将wenview自动保存密码功能关闭:

webView.getSettings().setSavePassword(false);

logcat日志

==================================================================

有的时候为了方便跟踪用户操作反馈,app端往往会把日志保存在sd卡上,然后在适当的机会将用户日志上传到服务器,然后开发人员可以查看用户日志信息,分析相关的问题。

但是这样做有个很大的风险就是日志里面往往包含了app的一些敏感信息,比如url地址、参数、还有类名,以及用户的使用记录,包括名称、id、聊天记录等等。

虽然app可以做一些操作来减少风险,比如定期删除日志等,但是毕竟这些信息还是外露了,可能被别有用心的人利用。

所以我们对日志输出的要求是:

  1. 不存储在外部,比如手机存储空间;

  2. 测试环境可以在logcat输出日志信息;

  3. 正式环境屏蔽所有日志输出。包括logcat和手机外部存储;

  4. 不使用System.out输出日志;

另外,项目中日志输出需要统一使用同一个日志管理类,不应该存在多个输出日志的类。

网络请求

==============================================================

所有网络请求必须使用https。而且在Android P系统中,默认使用加密连接,所有未加密的连接会受限:

Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P)

的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P

系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer

Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。

如果使用http连接,那么会返回如下错误信息:

//http在使用HttpUrlConnection时遇到的异常 W/System.err: java.io.IOException:

Cleartext HTTP traffic to **** not permitted //http在使用OkHttp时遇到的异常

java.net.UnknownServiceException: CLEARTEXT communication ** not

permitted by network security policy

api接口

===============================================================

参考:Android解决方案之:API接口安全设计规范

so文件

==============================================================

通常简单的做法是将密钥等敏感信息保存在Java代码中,比如直接写在静态变量里。但是这样很容易被编译破解,即使代码有混淆。

我们考虑可以将一些敏感信息,比如密码、密钥等,通过cpp代码,保存在so文件中。这样会增加敏感信息被破解的难度。

需要说明的是,如果使用so文件,那么so文件也需要加壳。

github上有一个可以自动生成加密so库的插件cipher.so,这样通过在gradle里配置需要加密的数据,即可加密保存到so库,并且自动生成对应的Java接口。

cipher.so {

keys {

数据库 {

value = ‘你好数据库!,?’

}

hello {

value = ‘Hello From Cipher.so?’

总结

现在新技术层出不穷,如果每次出新的技术,我们都深入的研究的话,很容易分散精力。新的技术可能很久之后我们才会在工作中用得上,当学的新技术无法学以致用,很容易被我们遗忘,到最后真的需要使用的时候,又要从头来过(虽然上手会更快)。

我觉得身为技术人,针对新技术应该是持拥抱态度的,入了这一行你就应该知道这是一个活到老学到老的行业,所以面对新技术,不要抵触,拥抱变化就好了。

Flutter 明显是一种全新的技术,而对于这个新技术在发布之初,花一个月的时间学习它,成本确实过高。但是周末花一天时间体验一下它的开发流程,了解一下它的优缺点、能干什么或者不能干什么。这个时间,并不是我们不能接受的。

如果有时间,其实通读一遍 Flutter 的文档,是最全面的一次对 Flutter 的了解过程。但是如果我们只有 8 小时的时间,我希望能关注一些最值得关注的点。

(跨平台开发(Flutter)、java基础与原理,自定义view、NDK、架构设计、性能优化、完整商业项目开发等)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
(跨平台开发(Flutter)、java基础与原理,自定义view、NDK、架构设计、性能优化、完整商业项目开发等)

[外链图片转存中…(img-nC7CGUhb-1714797277129)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 背景 4 2. 编码安全 4 2.1. 输入验证 4 2.1.1. 概述 5 2.1.2. 白名单 5 2.1.3. 黑名单 5 2.1.4. 规范化 5 2.1.5. 净化 5 2.1.6. 合法性校验 6 2.1.7. 防范SQL注入 6 2.1.8. 文件校验 6 2.1.9. 访问控制 6 2.2. 输出验证 6 2.2.1. 概述 6 2.2.2. 编码场景 6 2.2.3. 净化场景 7 2.3. SQL注入 7 2.3.1. 概述 7 2.3.2. 参数化处理 7 2.3.3. 最小化授权 7 2.3.4. 敏感数据加密 7 2.3.5. 禁止错误回显 8 2.4. XSS跨站 8 2.4.1. 输入校验 8 2.4.2. 输出编码 8 2.5. XML注入 8 2.5.1. 输入校验 8 2.5.2. 输出编码 8 2.6. CSRF跨站请求伪造 8 2.6.1. Token使用 9 2.6.2. 二次验证 9 2.6.3. Referer验证 9 3. 逻辑安全 9 3.1. 身份验证 9 3.1.1. 概述 9 3.1.2. 提交凭证 9 3.1.3. 错误提示 9 3.1.4. 异常处理 10 3.1.5. 二次验证 10 3.1.6. 多因子验证 10 3.2. 短信验证 10 3.2.1. 验证码生成 10 3.2.2. 验证码限制 10 3.2.3. 安全提示 11 3.2.4. 凭证校验 11 3.3. 图灵测试 11 3.3.1. 验证码生成 11 3.3.2. 验证码使用 11 3.3.3. 验证码校验 11 3.4. 密码管理 12 3.4.1. 密码设置 12 3.4.2. 密码存储 12 3.4.3. 密码修改 12 3.4.4. 密码找回 12 3.4.5. 密码使用 12 3.5. 会话安全 13 3.5.1. 防止会话劫持 13 3.5.2. 会话标识符安全 13 3.5.3. Cookie安全设置 13 3.5.4. 防止CSRF攻击 13 3.5.5. 会话有效期 14 3.5.6. 会话注销 14 3.6. 访问控制 14 3.6.1. 跨权访问 14 3.6.2. 控制方法 14 3.6.3. 控制管理 14 3.6.4. 接口管理 15 3.6.5. 权限变更 15 3.7. 文件上传安全 15 3.7.1. 身份校验 15 3.7.2. 合法性校验 15 3.7.3. 存储环境设置 15 3.7.4. 隐藏文件路径 16 3.7.5. 文件访问设置 16 3.8. 接口安全 16 3.8.1. 网络限制 16 3.8.2. 身份认证 16 3.8.3. 完整性校验 16 3.8.4. 合法性校验 16 3.8.5. 可用性要求 17 3.8.6. 异常处理 17 4. 数据安全 17 4.1. 敏感信息 17 4.1.1. 敏感信息传输 17 4.1.2. 客户端保存 17 4.1.3. 服务端保存 17 4.1.4. 敏感信息维护 18 4.1.5. 敏感信息展示 18 4.2. 日志规范 18 4.2.1. 记录原则 18 4.2.2. 事件类型 18 4.2.3. 事件要求 18 4.2.4. 日志保护 19 4.3. 异常处理 19 4.3.1. 容错机制 19 4.3.2. 自定义错误信息 19 4.3.3. 隐藏用户信息 19 4.3.4. 隐藏系统信息 19 4.3.5. 异常状态恢复 20 4.3.6. 通信安全 20

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值