5.2.1 示例代码 5.2.1.1 如何使用 Android OS 的系统权限 Android 操作系统有一个称为“权限”的安全机制,可以保护其用户的资产(如联系人和 GPS 功能)免受恶意软件的侵害。 当应用请求访问受 Android OS 保护的信息或功能时,应用需要显式声明权限才能访问它们。 安装应用,它申请需要用户同意的权限时,会出现以下确认界面 [23]。 [23] 在 Android
4.6.1 示例代码 如上所述,文件原则上应该是私有的。 但是,由于某些原因,有时文件应该由其他应用直接读写。 按照安全角度分类和比较中文件类型如表 4.6-1 所示。 它们根据文件存储位置或其他应用的访问权限分为四类。 下面展示了每个文件类别的示例代码,并在其中添加了每个的解释。 表 4.6-1 按照安全角度的文件类别和比较 文件类别 其它应用的访问权限 储存位置 概述 私有文件 NA 应用目录
4.5.1 示例代码 4.5.1.1 创建/操作数据库 在 Android 应用中处理数据库时,可以通过使用SQLiteOpenHelper [10] 来实现数据库文件的适当安排和访问权限设置(拒绝其他应用访问的设置)。 下面是一个简单的应用示例,它在启动时创建数据库,并通过 UI 执行搜索/添加/更改/删除数据。 示例代码完成了 SQL 注入的防范,来避免来自外部的输入执行不正确的 SQL。 [
4.4.1 示例代码 使用服务的风险和对策取决于服务的使用方式。 您可以通过下面展示的图表找出您应该创建的服务类型。 由于安全编码的最佳实践,根据服务的创建方式而有所不同,因此我们也将解释服务的实现。 表 4.4-1 服务类型的定义 类型 定义 私有 不能由其他应用加载,所以是最安全的服务 公共 应该由很多未指定的应用使用的服务 伙伴 只能由可信的伙伴公司开发的应用使用的服务 内部 只能由其他内部
4.3.1 示例代码 使用内容供应器的风险和对策取决于内容供应器的使用方式。 在本节中,我们根据内容供应器的使用方式,对 5 种类型的内容供应器进行了分类。 您可以通过下面显示的图表,找出您应该创建哪种类型的内容供应器。 表 4.3-1 内容供应器类型定义 类型 定义 私有 不能由其他应用使用的内容供应器,所以是最安全的 公共 应该由未指定的大量应用使用的内容供应器 伙伴 只能由可信的伙伴公司开发
4.2.1 示例代码 接收广播需要创建广播接收器。 使用广播接收器的风险和对策,根据收到的广播的类型而有所不同。 你可以在以下判断流程中找到你的广播接收器。 接收应用无法检查发送广播的应用的包名称,它是链接伙伴所需的。 因此,无法创建用于伙伴的广播接收器。 表 4.2:广播接收器的类型定义: 类型 定义 私有 只能接收来自相同应用的广播的广播接收器,所以是最安全的 公共 可以接收来自未指定的大量应
4.1.1 示例代码 使用活动的风险和对策取决于活动的使用方式。 在本节中,我们根据活动的使用情况,对 4 种活动进行了分类。 你可以通过下面的图表来找出,你应该创建哪种类型的活动。 由于安全编程最佳实践根据活动的使用方式而有所不同,因此我们也将解释活动的实现。 表 4-1 活动类型的定义 类型 定义 私有 不能由其他应用加载,所以是最安全的活动 公共 应该由很多未指定的应用使用的活动 伙伴 只能
11.1 Java 源文件示例 下面的例子,展示了如何合理布局一个包含单一公共类的Java源程序。接口的布局与其相似。更多信息参见 "类和接口声明" and "文档注释" /* * @(#)Blah.java 1.82 99/03/18 * * Copyright (c) 1994-1999 Sun Microsystems, Inc. * 901 S
为了说明实时功能的特点,我们使用 WebSocket 协议来实现一个基于浏览器的实时聊天程序,就像你在 Facebook 中用文字聊天一样。但是我们这里要更进一步,我们要让不同的用户可以同时互相交谈。 程序逻辑如图 11.1 所示 #1客户端/用户连接到服务器,并且是聊天的一部分 #2聊天消息通过 WebSocket 进行交换 #3消息双向发送 #4服务器处理所有的客户端/用户 逻辑很简单: 1.
org.hibernate.criterion.Example 类允许你通过一个给定实例构建一个条件查询。 Cat cat = new Cat(); cat.setSex('F'); cat.setColor(Color.BLACK); List results = session.createCriteria(Cat.class) .add( Example.create(cat) )
Keras示例程序 addition_rnn.py: 序列到序列学习, 实现两个数的加法 antirectifier.py: 展示了如何在Keras中定制自己的层 babi_memnn.py: 在bAbI数据集上训练一个记忆网络,用于阅读理解 babi_rnn.py: 在bAbI数据集上训练一个循环网络,用于阅读理解 cifar10_cnn.py: 在CIFAR10数据集上训练一个简单的深度CNN
工具和示例 在介绍自定义网络拓扑之前,你可能会对一些外部工具和例子感兴趣: pipework Jérôme Petazzoni 编写了一个叫 pipework 的 shell 脚本,可以帮助用户在比较复杂的场景中完成容器的连接。 playground Brandon Rhodes 创建了一个提供完整的 Docker 容器网络拓扑管理的 Python库,包括路由、NAT 防火墙;以及一些提供 HTT
以下是使用PrepareStatement对象进行批处理的典型步骤序列 - 使用占位符创建SQL语句。 使用prepareStatement()方法创建PrepareStatement对象。 使用setAutoCommit()将auto-commit设置为false。 使用创建的语句对象上的addBatch()方法,将您喜欢的SQL语句添加到批处理中。 在创建的语句对象上使用executeBatc
以下是使用语句对象批处理的典型步骤序列 - 使用createStatement()方法创建Statement对象。 使用setAutoCommit()将auto-commit设置为false。 使用创建的语句对象上的addBatch()方法,将您喜欢的SQL语句添加到批处理中。 在创建的语句对象上使用executeBatch()方法执行所有SQL语句。 最后,使用commit()方法提交所有更改。
以下是使用事务教程中描述的setSavepoint和rollback的示例。 此示例代码是基于前面章节中完成的环境和数据库设置编写的。 复制并通过JDBCExample.java中的以下示例,编译并运行如下 - //STEP 1. Import required packages import java.sql.*; public class JDBCExample { // JDBC dr