如何防范移动安全漏洞
- 1.如何防范移动安全
- 2.开发者如何防范移动安全
- 1.不要明文存储重要数据
- 2.文件存储权限漏洞
- 3.网络安全
- 4.未进行应用截屏防护
- 5.XSS跨站脚本攻击
1.如何防范移动安全
1). 不要选择小众品牌手机
底层ROM漏洞是移动安全最重要的威胁,不排除手机厂商会通过内置恶意应用收集用户信息,这样用户很轻易的变成了‘鸡肉’
如果手机在启动的时候增加了个恶意程序,恶意程序可以实时截取屏幕信息,这样信息就很容易被泄露
2). 不要轻易root手机
root是一个非常高的权限,data —>data 下的私有目录在没有root手机的情况下是不能访问的,手机文件夹管理信息是搜索这个目录是不可见的,但是一旦root手机,这个目录就会被搜索出来,会被查看数据库信息
3). 不要轻易输入账号密码
类似一些垃圾短息里面链接输入账号密码很容易被钓鱼,账号密码很容易被获取,要找正规的
4). 不要轻易授予权限
在6.0之后要动态授予权限,下载一个不熟悉的app,不要轻易授予权限
5). 不要轻易链接不明wifi
中间人攻击,连到这个不明wifi很容易被sslstrip攻击,黑客攻击
攻击:明明是一个https请求,它把它降级了降级成http请求,那么请求的数据和返回的response 都会被黑客获取到。
6). http升级https,防止http劫持
http劫持:就是去浏览器观看一篇新闻,会出现澳门赌场、彩票的图片或者卡片。当用户发送http请求时明文传输,明文被人劫持到了加入了一些自己的东西。
https现在是互联网公司必备的传输协议。
2.开发者如何防范移动安全
1.不要明文存储重要数据
危险分析:手机root后,会随意访问任何文件目录,造成隐私泄露风险。
常用的加密算法:
MD5加密:在线加密解密 地址:https://www.cmd5.com
MD5信息摘要算法(英文:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数。
例:123456 通过MD5加密后就变成了信息摘要
密码散列函数:通常是指不可逆的算法。
但是MD5算法防止不了暴力破解,因为相同字符串的信息摘要是一样的,如果去重之前录入的信息摘要库里对比找到一样的就可以还原字符串。
MD5常用的场景:
1.传递重要的数据
2.下载文件中作为文件名也就是文件指纹
拓展:
- MD5+salt: 123456+jiami(salt) 然后整体加密
- SHA
public class MD5 {
// 得到的数值是 32位 16进制 字符串
public static String md5Decode32(String content) {
byte[] hash;
try {
hash = MessageDigest.getInstance("MD5").digest(content.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("NoSuchAlgorithmException",e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("UnsupportedEncodingException", e);
}
//对生成的16字节数组进行补零操作
StringBuilder hex = new StringBuilder(hash.length * 2);
for (byte b : hash) {
if ((b & 0xFF) < 0x10){
hex.append("0");
}
hex.append(Integer.toHexString(b & 0xFF));
}
return hex.toString();
}
}
2.文件存储权限漏洞
标准情况下,私有目录的文件权限后三位应为空(类似 “rw-rw—”),即除应用本身外任何人无法读写,目录则允许多有一个执行位(类似“rwxrwx—x”)
漏洞模拟:
1.编写app存储sp为MODE_WORLD_REABADLE 可读模式,其他软件也可以获取到sp中内容
需要改成MODE_PRIVATE,才不会出现安全问题
2.编写黑客app获取漏洞app的数据内容
3.网络安全
http: 数据内容是明文传输,容易被流量攻击
https: 数据是加密的采用SSL/TLS
SSL/TLS 防止的安全风险:
1)窃听风险
2)篡改风险
3)冒充风险
SSL/TLS 防止的安全风险原理:
1)加密:非对称加密+对称加密,主要解决的是窃听风险
2)校验:数字签名,主要解决的是篡改风险
3)证书:数字证书,主要解决冒充风险
对称加密算法:加密和解密都用的同一把秘钥,这种加密方法称为对称加密。
常用的对称加密算法有:AES、DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
mTvAes.setOnClickListener(new View.OnClickListener() {
//原文 or 密文
String content = "AES对称加密";
//秘钥
String key = "todayinformation";
//"算法/工作模式/填充模式"
String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
@Override
public void onClick(View v) {
if (isAdle) {
//去加密
try {
//生成秘钥
SecretKey secretKey = new SecretKeySpec(key.getBytes("utf-8"), "AES");
//加密解密器
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
//Cipher.ENCRYPT_MODE 加密模式
cipher.init(Cipher.ENCRYPT_MODE,secretKey);
//bytes 解密后的字节数组
byte[] bytes = cipher.doFinal(content.getBytes());
//如果不转成16进制 会出现乱码,因为我们加密的原文有中文
content = ByteUtil.parseByte2HexStr(bytes);
mTvAes.setText("加密后的结果 = " + content);
} catch (Exception e) {
e.printStackTrace();
}
} else {
//去解密
try {
SecretKey secretKey = new SecretKeySpec(key.getBytes("utf-8"), "AES");
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
//仅仅只有这里不一样 解密模式
cipher.init(Cipher.DECRYPT_MODE,secretKey);
byte[] bytes = cipher.doFinal(ByteUtil.parseHexStr2Byte(content));
content = new String(bytes,"UTF-8");
mTvAes.setText("解密后的结果 = " + content);
} catch (Exception e) {
e.printStackTrace();
}
}
isAdle = !isAdle;
}
});
对称加密算法常用场景:
1).本地数据加密(例如加密 android里SharedPreferences里面的某些敏感数据)
2).网络传输:登录接口post请求参数加密
{username=lisi.pwd=oJYa4i9VASRoxVLh75wPCg=}
3).加密用户登录结果信息并序列化到本地磁盘里
4).https
4.未进行应用截屏防护
部分应用在输入密码时未使用定制键盘而调用了系统键盘,当用户使用时捆绑,可能截屏。
public abstract class BaseActivity extends LifeCircleMvpActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置安全属性,则可以防止键盘输入截屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
setContentView(R.layout.activity)
}
5.XSS跨站脚本攻击
例如:客户输入的html代码,后台也返回的html代码,则可以点击有效果
解决:后台要考虑html属性过滤掉<>,可以防止XSS攻击。