安全传输
# 背景介绍
近年来,以云计算、大数据、人工智能、物联网为代表的新兴技术的快速发展,网络安全风险全面泛化,复杂程度也在不断加深。特别是随着新冠肺炎疫情的蔓延,在加速企业数字化转型的进程的同时,也让网络安全风险开始遍布在越来越多的场景之中。
- 疑似超2亿国内个人信息在国外暗网论坛兜售
1月5日,国外安全研究团队Cyble发现多个帖子正在出售与中国公民有关的个人数据,经分析可能来自微博、QQ等多个社交媒体,本次发现的几个帖子中与中国公民有关的记录总数超过2亿。其中还发现了大量湖北省“公安县”的公民数据。
- 国内某银行疑似发生数据泄露高达1679万条
1月8日,有人在某国外论坛中发帖售卖国内某银行1679万笔数据,并放出部分数据样本,数据包括名字、性别、卡号、身份证号、手机号码、所在城市、联系地址、工作单位、邮编、工作电话、住宅电话、卡种、发卡行等等。
- 中国初创公司Socialarks泄露400GB数据,影响全球2亿多用户
安全公司Safety Detectives发现,中国初创公司Socialarks(笨鸟社交)泄露了400GB数据。此次数据泄露是由于ElasticSearch数据库设置错误,泄露了总计408GB,超过3.18亿条用户记录,涉及到11651162个Instagram用户、66117839个领英用户和81551567个Facebook用户。
值得注意的是,Socialarks在2020年8月也发生了类似的事件,泄露了1.5亿个用户的个人数据。
# 密码加密
由于隐私安全性的重要性。所以在使用平台时,一定要注意隐私性。这里分享一种思路 用户登录时,对登录密码进行加密。
修改密钥注意同步修改前后端的key ,必须为 16位。
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<title>Page Title</title>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<link rel='stylesheet' type='text/css' media='screen' href='main.css'>
<script src="http://cdn.bootcdn.net/ajax/libs/crypto-js/4.0.0/crypto-js.js"></script>
<script>
function btnAction() {
var data = document.getElementById("content").value;
var params = document.getElementById("key").value;
const key = CryptoJS.enc.Latin1.parse(params)
var iv = key
// 加密
var encrypted = CryptoJS.AES.encrypt(data, key, {
iv: iv,
mode: CryptoJS.mode.CFB,
padding: CryptoJS.pad.NoPadding
})
var box = document.getElementById("result")
box.innerHTML=encrypted.toString();
}
</script>
密钥: <input type="text" id="key" /> <br/>
内容: <input type="text" id="content" /> <br/>
<button type="submit" id="btn_submit" onclick="btnAction()">加密</button> <br>
<span id="result"></span>
</head>
<body>
</body>
</html>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
后端可解密,然后在使用更安全的方式来进行加密保存密码。例如使用SHA-256
加盐
处理。
public static String decode(String key, String encryptedMsg) {
String password = "";
try {
AES aes = new AES(Mode.CFB, Padding.NoPadding,
new SecretKeySpec(key.getBytes(), KEY_ALGORITHM),
new IvParameterSpec(key.getBytes()));
password = aes.decryptStr(encryptedMsg);
} catch (Exception e) {
throw new BaseException("解码错误");
}
if (StringUtils.isBlank(password)) {
throw new BaseException("解码错误");
}
return password;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# TLS/SSL
B/S大多通过HTTP
的方式进行交互处理。此时尤为需要注意,要使用HTTPS
的方式才是安全的。以为HTTP
没有加密。通过抓包工具可以直接到请求/响应的原文。非常的不安全。
使用现代浏览器Chrome,如果你要访问http的网站,都会提示有隐私泄露的风险。
如果您想检查您的网络浏览器使用的是哪个SSL/TLS版本,您可以使用How’s My SSL工具 (opens new window)
# TLS和SSL如何保护数据?
以下是SSL和TLS工作原理的高级流程。
当您在Web服务器上安装SSL/TLS证书(通常简称为“SSL 证书”)时,它包含一个公钥和一个私钥,用于验证您的服务器并让您的服务器加密和解密数据。
当访问者访问您的站点时,他们的Web浏览器将查找您站点的SSL/TLS证书。然后,浏览器将执行“握手”以检查您的证书的有效性并验证您的服务器。如果SSL证书无效,您的用户可能会遇到“您的连接不是私密连接”错误,这可能会导致他们离开您的网站。
一旦访问者的浏览器确定您的证书有效并对您的服务器进行身份验证,它实际上会在它和您的服务器之间创建一个加密链接,以安全地传输数据。
这也是HTTPS的用武之地(HTTPS代表“HTTP over SSL/TLS”)。
HTTP和更新的HTTP/2是应用程序协议,在通过Internet传输信息方面发挥着重要作用。
使用普通HTTP,该信息容易受到攻击。但是,当您通过SSL或TLS (HTTPS)使用HTTP时,您会在传输过程中对该数据进行加密和身份验证,从而确保其安全。
这就是为什么您可以通过HTTPS而不是通过HTTP安全地处理信用卡详细信息的原因,也是Google Chrome如此努力地推动采用HTTPS的原因。
# 防火墙
防火墙只开放指定端口,做好管控。
如果使用的是云服务版本,支持安全组设置。只允许开放指定IP的用户。
# 禁止docker使用iptables防火墙
使用docker run -p 端口:端口启动容器
时,docker
会绕过防火墙firewalld的,原理是修改了iptables,那不让它修改iptables即可,此方法无需切换默认防火墙。
按照所述设置即可。详情请见: 解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题 (opens new window)
# 暂时不用修改,如果无法使用外网或者内网再修改
vim /etc/default/docker
#修改文件,此处设置等同于在创建容器时手动指定iptables=false参数
DOCKER_OPTS="--dns 114.114.114.114 --dns 8.8.8.8 -iptables=false"
2
3
4
5
vim /etc/docker/daemon.json
增加如下内容
{
"iptables": false
}
2
3
4
5