移动应用安全开发指南(Android)--数据验证
|
概述 |
移动应用往往通过数据的发送、接收和处理来完成一系列功能,通常情况下,处理的数据绝大部分都来源于外部(比如网络、内部或外部存储和用户输入等),对这些数据处理不当会导致各种各样的漏洞和风险,比代码执行和信息泄漏等等。 |
|
|
安全准则 |
A. 一般性原则:对所有外部数据进行数据验证,数据验证建议采用白名单的方式,即只允许指定的字符通过,其它字符一律过滤,同时验证数据的长度和类型等。 B. 使用参数化查询语句防止SQL注入(参考附录3)。 C. 使用WebViews时,将JavaScript和插件支持特性关掉(此为默认值),如果一定要打开该特性,需要对输出的内容进行html转义。 D. 设置禁止WebViews对文件系统进行存取,以防止文件包含漏洞。 E. 在activity内使用Intent Filter对action和data进行过滤。 |
|
|
详细描述 |
A. 进行白名单数据验证的常用方法是使用正则表达式,样例可参考附录6。 B. 预编译查询可以有效防止应用把数据当作代码来执行,样例可参考附录3。 C. Html输出转义规则如下(详情可参考附录7): &à& < à < > à > “ à " ‘ à ' / à / 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("<");
break;
case '>':
sb.append(">");
break;
case '"':
sb.append(""");
break;
case '\'':
sb.append("'");
break;
case '/':
sb.append("/");
break;
case '&':
sb.append("&");
break;
default:
sb.append(c);
}
}
return sb.toString();
}
移动应用安全开发指南(Android)--数据验证的更多相关文章
- ASP.NET MVC3 入门指南之数据验证[源码RAR下载]
http://www.cnblogs.com/BingoLee/archive/2011/12/23/2298822.html 前言: 无论你编写什么样的网页程序,都需要对用户的数据进行验证,以确数据 ...
- 【Android 应用开发】Android 数据存储 之 SQLite数据库详解
. 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19028665 . SQLiteDataBase示例程序下 ...
- 移动应用安全开发指南(Android)--Android组件和IPC
概述 移动应用开发中,往往有跨进程通信的需求,方便地实现程序间的数据共享.Android提供了多种IPC通信的方式,给开发人员带来了便利,但如果选择或使用不当,就有可能发生各种各样的风险. 安全准则 ...
- Android开发学习——android数据存储
Android的存储 Android中的数据存储方式及其存储位置 SharedPrefrence存储 1). 位置 /data/data/packageName/shared_pr ...
- Web安全开发指南--数据验证
1.数据验证 4.1.输入数据验证安全规则 1 数据验证必须放在服务器端进行. 2 至少对输入数据的数据类型.数据范围和数据长度进行验证. 3 所有来自不可信数据源(比如网络.用户命令.数据库和文件系 ...
- 移动应用安全开发指南(Android)--完结篇(http://www.bubuko.com/infodetail-577312.html)
1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP出于性能提升或用户体验等原因,将其做在客户端完成, ...
- 移动应用安全开发指南(Android)--完结篇
如果IE显示格式不正常,请使用chrome浏览器 1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP ...
- Android SDK 开发指南
Android SDK 开发指南 视频详解 以下视频是对融云 Android SDK 开发使用的详细讲解,您可以在阅读文档时配合学习. 更多视频教程如下: CSDN 融云 Android SDK ...
- Android进程和线程(Android开发指南--译)
(转自:http://www.cnblogs.com/xitang/archive/2011/09/24/2189460.html) Processes and Threads 译者署名: 呆呆大虾 ...
随机推荐
- 如何读懂statspack报告
前言:这篇文章是我从网上找到的,但可惜不知道是哪位大侠写(译)的,因此这里无法注明了.仔细看了看,这篇文章对初学者应该很有帮助,写的比较详细,通俗易懂,因此整理一下,便于阅读:内容略有调整,不单做调整 ...
- webstrom 里面使用github
1.输入github的账号和密码,点击登录 2.复制github的项目地址,现在clone就行了
- 2、gitlab 新建项目
一.创建项目 1.访问gitlab并登录 http://git.xh.com/ 2.点击 Projects -> Starred projects 每个版本的gitlab不太一样但位置都差不多 ...
- MySQL-开发规范升级版
一.基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8,必要时候使用utf8mb4 解读: (1)通用,无乱码风险,汉字3字节,英文1字节 (2)utf8mb4是utf8的超集,有 ...
- 字符串匹配的KMP算法(如何实现还需静下心来细看)
第一部分:KMP算法的理解(转:http://kb.cnblogs.com/page/176818/) 字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串"BBC ABCDAB AB ...
- 如何关闭WordPress后台的主题、插件、版本更新通知?
由于WordPress 更新速度非常快,不论是主题 插件或是版本,每个月少说要执行个好几次,因为更新快,所以WordPress后台加入了更新通知,提醒使用者有新版本了,可以进行插件.主题或是系统更新, ...
- appium---【Mac】appium-doctor提示WARN:“fbsimctl cannot be found”解决方案
报错提示截图如下: 解决方案: brew tap facebook/fb brew install fbsimctl --HEAD 执行完命令重新运营appium-doctor即可看到成功已安装此包:
- 寻找并输出11~999之间的回文数m
寻找并输出11~999之间的数m,它满足m.m2和m3均为回文数. 回文:各位数字左右对称的整数. 例如:11满足上述条件 112=121,113=1331 判断一个数是否是回文数的方法:求该数的反序 ...
- Python全栈开发之6、正则表达式
转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5498162.html 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串,在文本处理方面功能非常强大 ...
- 牛客网 牛客练习赛43 F.Tachibana Kanade Loves Game-容斥(二进制枚举)+读入挂
链接:https://ac.nowcoder.com/acm/contest/548/F来源:牛客网 Tachibana Kanade Loves Game 时间限制:C/C++ 1秒,其他语言2秒 ...