概述

移动应用往往通过数据的发送、接收和处理来完成一系列功能,通常情况下,处理的数据绝大部分都来源于外部(比如网络、内部或外部存储和用户输入等),对这些数据处理不当会导致各种各样的漏洞和风险,比代码执行和信息泄漏等等。

安全准则

A.      一般性原则:对所有外部数据进行数据验证,数据验证建议采用白名单的方式,即只允许指定的字符通过,其它字符一律过滤,同时验证数据的长度和类型等。

B.      使用参数化查询语句防止SQL注入(参考附录3)。

C.      使用WebViews时,将JavaScript和插件支持特性关掉(此为默认值),如果一定要打开该特性,需要对输出的内容进行html转义。

D.      设置禁止WebViews对文件系统进行存取,以防止文件包含漏洞。

E.       在activity内使用Intent Filter对action和data进行过滤。

详细描述

A.      进行白名单数据验证的常用方法是使用正则表达式,样例可参考附录6。

B.      预编译查询可以有效防止应用把数据当作代码来执行,样例可参考附录3。

C.      Html输出转义规则如下(详情可参考附录7):

&à&

< à &lt;

> à &gt;

“ à &quot;

‘ à '

/ à /

D.      webview.getSettings().setAllowFileAccess(false)可用于关闭WebViews对文件系统进行存取的能力。

备注

这里的外部数据包含但不限于以下来源的数据:网络、存储(特别注意外部存储)、文件、数据库、IPC和用户输入等。

如显示格式不正确,建议使用chrome浏览器

附录:

3、SQLite防止SQL注入漏洞方案

11.1.1、使用SQLiteDatabase对象自带的防SQL注入的方法,比如query(),insert(),update和delete():

DatabaseHelper dbhelper = new DatabaseHelper(SqliteActivity.this,"sqliteDB");

SQLiteDatabase db = dbhelper.getReadableDatabase();

 

/*查询操作,userInputID和userInputName是用户可控制的输入数据 */

Cursor cur = db.query("user", new String[]{"id","name"}, "id=? and name=?", new String[]{:错误地使用rawQuery(),未绑定参数*/

String sql = "select * from user where id='" + :使用execSQL()方法*/

String sql = "INSERT INTO user values('"+、HTML转义输出样例:

7.1、使用Android自带的html转义函数:

         String str = TextUtils.htmlEncode(str);

7.2、自定义的html转义函数:

         public static String htmlEncode(String str){

                   char c ;

                   StringBuilder sb = new StringBuilder();

                   int len = str.length();

                   for(int i=0 ;i<len; i++){

                            c = str.charAt(i);

                           

                            switch(c){

                            case '<':

                                     sb.append("&lt;");

                                     break;

                            case '>':

                                     sb.append("&gt;");

                                     break;

                            case '"':

                                     sb.append("&quot;");

                                     break;

                            case '\'':

                                     sb.append("'");

                                     break;

                            case '/':

                                     sb.append("/");

                                     break;

                            case '&':

                                     sb.append("&amp;");

                                     break;

                            default:

                                     sb.append(c);

                            }                

                   }

                   return sb.toString();

         }

移动应用安全开发指南(Android)--数据验证的更多相关文章

  1. ASP.NET MVC3 入门指南之数据验证[源码RAR下载]

    http://www.cnblogs.com/BingoLee/archive/2011/12/23/2298822.html 前言: 无论你编写什么样的网页程序,都需要对用户的数据进行验证,以确数据 ...

  2. 【Android 应用开发】Android 数据存储 之 SQLite数据库详解

    . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19028665 . SQLiteDataBase示例程序下 ...

  3. 移动应用安全开发指南(Android)--Android组件和IPC

    概述 移动应用开发中,往往有跨进程通信的需求,方便地实现程序间的数据共享.Android提供了多种IPC通信的方式,给开发人员带来了便利,但如果选择或使用不当,就有可能发生各种各样的风险. 安全准则 ...

  4. Android开发学习——android数据存储

    Android的存储 Android中的数据存储方式及其存储位置 SharedPrefrence存储 1). 位置           /data/data/packageName/shared_pr ...

  5. Web安全开发指南--数据验证

    1.数据验证 4.1.输入数据验证安全规则 1 数据验证必须放在服务器端进行. 2 至少对输入数据的数据类型.数据范围和数据长度进行验证. 3 所有来自不可信数据源(比如网络.用户命令.数据库和文件系 ...

  6. 移动应用安全开发指南(Android)--完结篇(http://www.bubuko.com/infodetail-577312.html)

    1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP出于性能提升或用户体验等原因,将其做在客户端完成, ...

  7. 移动应用安全开发指南(Android)--完结篇

    如果IE显示格式不正常,请使用chrome浏览器 1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP ...

  8. Android SDK 开发指南

    Android SDK 开发指南 视频详解 以下视频是对融云 Android SDK 开发使用的详细讲解,您可以在阅读文档时配合学习.   更多视频教程如下: CSDN 融云 Android SDK ...

  9. Android进程和线程(Android开发指南--译)

    (转自:http://www.cnblogs.com/xitang/archive/2011/09/24/2189460.html) Processes and Threads 译者署名: 呆呆大虾 ...

随机推荐

  1. Android 反编译神器jadx的使用

    一.前言 今天介绍一个非常好用的反编译的工具 jadx .jadx 的功能非常的强大,对我而言,基本上满足日常反编译需求. jadx 优点: 图形化的界面. 拖拽式的操作. 反编译输出 Java 代码 ...

  2. Docker practice

    Docker 实践 目标 创建一个基于最新版Ubuntu的镜像,在该镜像中更新apt包源并安装NTP package,最后将该新镜像提交到本地私有的registry中. 本地创建私有Registry ...

  3. oracle只要第一条数据SQL

    select * from ( select * from COMMON_BIZREL_WF where sponsor is not null order by serialid ) where r ...

  4. mysql视图学习总结(转)

    一.使用视图的理由是什么?1.安全性.一般是这样做的:创建一个视图,定义好该视图所操作的数据.之后将用户权限与视图绑定.这样的方式是使用到 了一个特性:grant语句可以针对视图进行授予权限.2.查询 ...

  5. 2018-2019-2 网络对抗技术 20165301 Exp6 信息搜集与漏洞扫描

    2018-2019-2 网络对抗技术 20165301 Exp6 信息搜集与漏洞扫描 1.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 (1)各种搜索技巧的应用 (2)DNS ...

  6. 使用CEPH RGW admin ops API 进行用户user AK/SK管理的秘诀

    需求: 云平台面板上需要支持为不同的用户创建不同的RGW 的AK/SK用户秘钥,以完成对象存储的用户隔离,并可以管理bucket和查看bucket容量信息. 分析:查阅CEPH官网文档 S3 API  ...

  7. 二、python框架相关知识体系

    Django框架 1.django框架.flask框架和Tornado框架的区别? django框架,内置组件多,自身功能强大,是一个大而全的框架,ORM.Admin.中间件.Form.ModelFr ...

  8. MySQL----示例知识点整理

    示例语句: ),hour(c.created_at) from `behavior_client_view` c join `behavior_share` s on c.share_uuid=s.u ...

  9. java SE :文件基本处理 File、FileFilter、FileNameFilter

    File    对目录及文件的创建.重命名.删除.文件列表.判断是否存在 构造函数 // 完整的目录或文件路径 public File(String pathname) //父级目录/文件路径+子级目 ...

  10. css 画的动画表情

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...