android lint 安全分析

Android量身定做的代码审查利器——Lint 一、Android Lint简介 Android Lint是SDK Tools 16(ADT16,当前笔者使用的ADT已经是26了,所以现在就不用担心自己所使用的SDK中不包含lint工具了)开始引入的一个代码扫描工具,路径为:Sdk\tools\bin\lint.bat。通过它对Android工程源代码进行扫描和检查,可发现潜在的问题,以便程序员及早修正这个问题。通过Lint,无需实际执行应用,也不必编写测试用例,就可以检查Android项目中源文件是否存潜在的错误,以及在正确性、安全性、... 阅读详情

Androidlint 安全性检查简介

1、  lint简介

lint是一个比较出名的C语言工具,用来静态分析代码。与大多数C语言编译器相比,lint可以对程序进行更加广泛的错误分析,是一种更加严密的编译工具。最初,lint这个工具用来扫描C源文件并对源程序中不可移植的代码提出警告。但是现在大多数lint实用程序已经变得更加严密,它不但可以检查出可移植性问题,而且可以检查出那些虽然可移植并且完全合乎语法但却很可能是错误的特性。

Android也引进了lint,为了静态分析android源代码,AndroidSDK为开发者提供了一个静态代码分析工具,也就是lint。他可以通过扫描工程内所有代码和资源文件后根据所得结果将检测问题分成6大类向开发者报告:

正确性

可用性

安全性

无障碍性

性能

国际化

开发者可以根据问题的内容和类型来对代码进行分析修改。Lint检查的范围很广。这里也就只是介绍一下安全相关的部分。

 

2、  lint工作流程

lint是扫描静态代码,然后找出其中的问题。Lint流程图如下:



以上内容分成4部分:

App Source Files:工程源文件,包括java代码,xml文件,icon图片, ProGuard 配置文件等。

Lint.xml:lint的配置文件,在里面你可以设置想要检查的内容。

Lint tool:静态代码扫描工具,Eclipse上有相应插件,也可以在命令行上执行。

Lint Output:lint扫描结果的输出,可以指定使用html5格式输出。

 

3、  lint简单使用

如果使用Eclipse,并且安装了ADT插件,那么在Eclipse上有相应的插件。


上图打上记号的地方就是lint。有一个下拉菜单,里面可以选择你的工程进行lint检查。点击检查之后,在Eclipse下方就会出现一个栏目:lint warning。

 

 


4、  lint安全类检查项目

lint会进行一些安全性分析。对于代码本身的安全性,lint主要包括11项:

项目

检查内容

说明

PackagedPrivateKey

查找私钥文件

一般情况下,私钥文件不应该存在于工程之中

GrantAllUris

检查<grant-uri-permission>项是否共享了所有内容

通常情况下<grant-uri-permission>路径不应为‘/’(共享所有内容),应该制定确切的子集

SetJavaScriptEnabled

检查是否包含了SetJavaScriptEnabled

JavaScript交互会出很多问题,一些常见的webview问题前提就是该项为true

ExportedContentProvider

检查是否未设置权限就共享了content provider

默认情况下content provider是共享的,任何应用程序都可以通过它来读写数据。如果content provider提供的是敏感数据,应该禁止共享或增加权限控制

ExportedService

检查是否公开了服务

所有公开的服务都应该设置权限,否则所有应用程序都可以绑定在这个服务上

ExportedReceive

检查是否没设置权限就共享了receiver

如果receiver的exported属性设置为true,或intent-filter没有指明exported属性为false,那么该receiver是共享的,任何程序都可以使用这个receiver,这是很不安全的。

HardcodedDebugMode

检查在mainifest中是否为android:debuggable设置了固定值

默认情况下,程序调试时编译器会自动将android:debuggable设置为true,在发布的是否将其设置为false。如果在发布的时候manifest中包含该属性为true的语句,可能会泄露一些敏感的调试信息。

WorldReadableFiles

检查调用openFileOutput()和getSharedPreferences()函数时是否使用了MODE_WORLD_READABLE参数

建议在将文件设置成全局可读属性前确保文件内不会有敏感信息。

WorldWriteableFiles

检查调用openFileOutput()和getSharedPreferences()函数时是否使用了MODE_WORLD_WRITEABLE参数

建议在将文件设置成全局可写属性前确保文件内不会有敏感信息。如果有恶意软件修改了该文件,会导致程序严重出错。

AllowBackup

检查manifest中是否包含了allowBackup的设置

allowBackup默认为真,如果允许备份,用户可以讲程序中所有数据备份出来,以便修改后可以恢复回去。开发者应该仔细考虑自己的程序是否允许用户备份,这个在manifest中可以设置android:allowBackup

ExportedActivity

检查是否没有设置权限就共享了Activity

如果没对Activity设置权限控制,任何程序都可以使用它。

 

5、  lint.xml文件

我自己在Eclipse下搜寻lint.xml文件,内容如下:

<?xml version="1.0"encoding="utf-8"?>

<!--

 Copyright 2013 Google, Inc

 Licensed under the Apache License, Version 2.0 (the"License");

  youmay not use this file except in compliance with the License.

  Youmay obtain a copy of the License at

 

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software

 distributed under the License is distributed on an "AS IS"BASIS,

 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  Seethe License for the specific language governing permissions and

 limitations under the License.

-->

<lint>

</lint>

什么内容都没有,不过你可以向里面添加内容。注意添加的内容是不让lint扫描的或者调整lint扫描等级的。

官方给出了一个实例:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <!-- Disable the given check in this project -->
    <issue id="IconMissingDensityFolder" severity="ignore"/>
    <!-- Ignore the ObsoleteLayoutParam issue in the specifiedfiles -->
    <issue id="ObsoleteLayoutParam">
        <ignore path="res/layout/activation.xml"/>
        <ignore path="res/layout-xlarge/activation.xml"/>
    </issue>
    <!-- Ignore the UselessLeaf issue in the specified file -->
    <issue id="UselessLeaf">
        <ignore path="res/layout/main.xml" />
    </issue>
    <!-- Change the severity of hardcoded strings to"error" -->
    <issue id="HardcodedText" severity="error"/>
</lint>

关于java文件和xml文件的lint检查过滤,可以参看网站:http://developer.android.com/tools/debugging/improving-w-lint.html

 

6、  参考文件

《Android安全机制解析与应用实践》

http://developer.android.com/tools/help/lint.html

android lint检查问题列表:http://blog.youkuaiyun.com/thl789/article/details/8037333

 

 

android 启用lint检查 通过配置 lint.xml 文件,你可以自定义 Lint 的检查规则,并使其适应项目的需求。常见的 Lint 规则包括资源检查(未使用的资源、硬编码文本)、安全问题(不安全的 Intent)以及性能问题(日志记录等)。根据项目的具体需求,合理启用或禁用这些规则有助于提升代码质量。 阅读详情

相关推荐

【我的Android进阶之旅】Android 源代码中的Java代码中//$NON-NLS-1$ 注释是什么意思?

1、背景最近在负责公司基础业务和移动基础设施的开发工作,正在负责Lint代码静态检查工作。因此编写了自定义的Lint规则,在编写自定义的Lint规则前,当然是需要去把Google的关于Lint检测的源代码看一遍学习学习如何编写自定义规则。 google官方的lint源代码链接为: https://android.googlesource.com/platform/tools/base/+/

字节卷动 3431

Android性能优化之工具篇 — — Android Lint

官方介绍原文请移步:http://tools.android.com/tips/lint Lint简介 Android lint是在ADT16提供的新工具,它是一个代码扫描工具,能够帮助我们识别资源、代码结构存在的问题。 Lint优化哪些问题 遗漏的翻译(没用上的翻译)比如国际化未被翻译的字段值 布局性能(以前是 layoutopt工具,可以解决无用布局、嵌套太多、布局太多) 未使用...

骑猪追大象 2万+

Kettle 连接 Oracle 数据库全流程指南

例如:C:\Oracle\product\19.0.0\dbhome_1\jdbc\lib\ojdbc8.jar 2. 替换 Kettle 驱动文件 将驱动文件复制到 Kettle 的 目录: 删除旧版本驱动:如 ojdbc14.jar 只能保留一个oracle驱动 重启 Kettle 以加载新驱动 二、配置数据库连接 1. 启动 Kettle 并新建转换 运行 (Windows)或 (Linux)。 新建转换(Transformation),添加 “表输入” 步骤,双击进入配置。 2.

qq_44724453的博客 3483

Android代码优化---Android Lint

英文原文:http://tools.android.com/tips/lint 原文:Android Lint is a new tool introduced in ADT 16 (and Tools 16) which scans Android project sources for potential bugs. It is available both as a command lin

王学明 2526

(project generation have a problem)STM32CubeMX生成工程一直报错项目生成有问题[玄学三步解]

解决办法 第一步,检查自己是不是真的配置的不对,JAVA安装没,pack路径设置的对不对,这里有一位前辈的博文写的非常好,附加链接https://blog.youkuaiyun.com/ybhuangfugui/article/details/52225736#commentBox 第二步,如果按照前辈的博文设置的都一模一样,还是不对,想我下图这样。 那你来对地方了 方法很简单,你把你生成工程文件的路径彻底的...

展桑博客-BenjieBlog 2925

Qt Design Studio 入门指南:从零开始打造炫酷UI(详细+实用+轻松上手)

本文是Qt Design Studio的详细入门指南,旨在帮助UI设计新手从零开始轻松打造炫酷界面。文章系统介绍了软件的核心概念、安装步骤、主界面解析,并通过创建一个完整的登录界面实例,手把手教学如何拖拽组件、设置属性、添加交互状态与动画。同时,分享了创建自定义组件、管理资源以及提升效率的实用技巧与常见问题解决方案,让读者能够快速上手并应用于实际项目开发。

devops8pract的博客 589

Android Lint 原理及使用详解

Android Lint 原理及使用详解 Android Lint 是 ADT 16中引入的新工具,用于扫描 Android 项目源中的潜在错误。 Lint 是 Android 提供的一个强大的,用于静态扫描应用源码并找出其中的潜在问题的实用工具。lint 工具可以检查你的 Android 项目源文件是否有潜在的错误,以及在正确性、安全性、性能、易用性、无障碍性和国际化方面是否需要优化改进。 Lint 既可以用作命令行工具,也可以与 Eclipse 和 IntelliJ 集成在一起。它被设计成独立于 ID

卜大爷的博客 2万+

OCEAN 电路仿真

介绍利用 Cadence OCEAN 进行电路脚本仿真的方法

weixin_43249158的博客 4404

编程工具-git 报错 “UNPROTECTED PRIVATE KEY FILE” 问题解决

git 报错 “UNPROTECTED PRIVATE KEY FILE” 问题解决。 Permissions 0755 for '/Users/aibook/.ssh/id_rsa' are too open.It is required that your private key files are NOT accessible by others. Load key "/Users/aibook/.ssh/id_rsa": bad permissions

记录和分享程序人生的点点滴滴 1432

PADS Layout中快速导入自定义元器件封装的实用技巧

本文详细介绍了在PADS Layout中高效导入自定义元器件封装的实用技巧。针对封装“找不到”、“对不上”、“导不进”三大痛点,系统梳理了从封装文件来源识别、库规划管理,到三种核心导入场景(从库文件添加、从其他设计借用、处理第三方格式)的完整操作流程,并提供了导入后的关键验证清单与常见问题排查方法,旨在帮助硬件工程师快速掌握这一提升设计效率的关键技能。

weixin_29302047的博客 375

AI智能体丨使用Coze一键生成中式养生视频,39 条作品涨粉 37.9 万!(附保姆级教程)

本文介绍如何利用扣子(Coze)AI智能体工作流高效制作中式养生短视频。该方案通过AI自动生成养生文案、古风插画素材、语音合成和视频剪辑,将传统制作流程从2-3小时缩短至1-2分钟。工作流包含文案创作、音频生成、图片素材制作和视频合成四大模块,采用大模型处理各环节内容,最终输出可直接导入剪映的草稿文件。特别适合希望快速批量制作文化氛围感强、兼具干货与视觉效果的养生内容创作者,效率提升近百倍。

李同学Lino的博客 3029

Android 笔记:AndroidTrain , Lint , build,kotlin循环添加对象

加号 (+) 表示这是一个新的资源名称,必须创建该名称并将其添加到我们的资源(在 R.java 文件中)内。Android 框架还提供了许多其他 ID 资源。引用 Android 资源 ID 时,不需要加号,但必须添加 android 软件包命名空间,如下所示: android:id="@android:id/empty" 添加 android 软件包命名空间之后,现在,我们将从 android.R 资源类而非本地资源类引用 ID。 ID 不需要在整个结构树中具有唯一性,但在您要搜索的结构树部分应具有唯一性

m0_65145685的博客 246

Coze智能体开发:扣子智能体设置多Agent模式

在扣子中创建智能体后,智能体默认使用单 Agent 模式。在单 Agent 模式下处理复杂任务时,你必须编写非常详细和冗长的提示词,而且你可能需要添加各种插件和工作流等,这增加了调试智能体的复杂性。调试时任何一处细节改动,都有可能影响到智能体的整体功能,实际处理用户任务时,处理结果可能与预期效果有较大出入。

王国平的博客 3713

如何为Android项目配置GitHub Actions CI流水线:Parchment的Lint、构建与测试自动化实战

Parchment 是一款基于 Kotlin 2.0 与 Jetpack Compose 构建的 Android PDF 阅读器,其团队用 GitHub Actions 实现了 Lint 检查、Debug 构建与单元测试的全流程自动化。本文以 Parchment 的真实流水线为蓝本,手把手教你为 Android 项目配置一条完整的 CI 流水线,让每次提交都自动完成质量把关。 ## 📖 项目与

gitblog_00506的博客 94

AttributeError: module ‘numpy‘ has no attribute ‘int‘解决方案

本文主要介绍了AttributeError: module ‘numpy’ has no attribute 'int’解决方案,希望能对使用numpy的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 方案一 2.2 方案二

weixin_43178406的博客 28万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android Accessibility知识分享

但是目前的实现就是先读了左边,再读右边,那么如果用户是连续的滑动,那或许还能听懂5的意思,那万一是隔了好一会才滑过去的,只听到5的话,就不知所谓了。用这个属性来描述我们的视图,如果我们的组件是继承或是Button类型,那么我们的screen reader会识别出它是按钮,并且告诉用户可以点击去激活它。打开扫描器后,打开我们的app,此时会有一个蓝色按钮,点击它,扫描器就会扫描我们的app,然后就会给出结果,还要修改的建议。如果我们想screen reader跳过这个元素,移动到下一个,那么我们就可以将其。

weixin_40763897的博客 2553

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Mihon开发指南:如何为这款开源漫画阅读器贡献代码

Mihon是一款免费开源的Android漫画阅读器,支持本地内容阅读、多视图配置、漫画进度追踪等功能。项目采用Kotlin语言开发,基于Android Jetpack组件构建。完整项目结构可通过仓库根目录查看,核心代码位于[app/src/main/java/eu/kanade/tachiyomi](https://link.gitcode.com/i/c5987e70cc8ebbc5be85c3...

gitblog_01166的博客 602

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android Lint的使用

一、简介           Android SDK自带了工具Lint,通过它可以对Android工程源码进行静态代码分析,发现潜在的缺陷和优化改进项。      Lint就能解决我们的这些问题。Android lint是在ADT 16提供的新工具,它是一个代码扫描工具,能够帮助我们识别代码结构存在的问题,主要包括: 1)布局性能(以前是 layoutopt工

LeeChild001的博客 578

我用一份Android高级架构师,百万学习笔记【GitHub】征服了阿里P7大牛!

对于OOM,需要知道有哪些优化工具可以使用(Lint、MAT等),如何检测OOM,以及垃圾回收机制等深层次的原理。对于来说,如何减少apk体积、资源动态加载等都是必会的。以下是性能优化相关思维导图。

2401_83329718的博客 966

《Android 4 高级编程》学习笔记

简介: 主要记录看《Android 4 高级编程》的一些心得和新学到的东西 1:Android应用程序的类型: 1:前台应用程序:主要指Activity之类可以直接与用户交互界面 2:后台应用程序:主要指service和BroadcastReceiver之类的在后台运行并且没有界面的程序 3:间歇式应用程序:通常是可见的Activity和后台程序的联合体。如Notificatio

snoto的专栏 637

android-sunflower中的无障碍设计检查工具:Lint规则

在移动应用开发中,无障碍设计(Accessibility)是确保所有用户(包括残障人士)能够有效使用应用的关键环节。Android平台提供了强大的Lint规则检查工具,帮助开发者在编码阶段识别和修复无障碍问题。本文将以开源项目android-sunflower为例,详细介绍如何利用Lint规则提升应用的无障碍性。 ## 无障碍设计在android-sunflower中的实践 android-s...

gitblog_00701的博客 328

Android studio警告信息

安卓开发过程中遇到的警告问题

weixin_56070844的博客 1850

Android-Lint的简述

Android-Lint是SDK Tools 16 (ADT 16)之后才引入的工具,通过代码检查,可发现潜在的问题,并能对Android程序进行优化处理。Android-Lint提供了命令行方式执行,还可与IDE(如Eclipse)集成,并提供了html形式的输出报告。Android-Lint可以方便的与项目中的其他自动系统(配置/ Build / 测试等)集成。   Android

wojiaowenzhang的专栏 403

Android lint配置及使用

lint 工具可以检查您的 Android 项目源文件是否有潜在的 bug,以及在正确性、安全性、性能、易用性、无障碍性和国际化方面是否需要优化改进。

fumeidonga的博客 4932

什么是gradle

什么是gradle

时光钟摆 8109

Operit CI 中 Android Lint 门禁的移除演进:从 lintDebug 到 lint baseline 全面退出 PR 校验

本文基于 Operit 开源仓库的 CI 演进记录,系统梳理 Android Lint 如何在 PR 校验(Candidate checks)中逐步退出:先是移除 `:app:lintDebug` 任务执行,随后删除 lint baseline 归一化快速检查及其聚合门禁,最终使 Android lint 完全不再属于 PR 校验范围。读者读完可以掌握 Operit PR workflow 的快速

gitblog_00323的博客 291
上一篇: python 解析网络数据包
下一篇: python list添加
cogbee
博客等级 码龄17年 62粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值