情丿本是债 发布的文章
密码存储方案更改后,平滑过渡的几个方案
最近发现一个项目的密码存储方案采用的容易被爆破的方式,因此更换了新的存储算法,由此导致密码需要平滑过渡。
1.暴力重置:让用户在登陆之前必须重置密码,采用新算法入库密码,缺点:太不友好。有点:少写代码
2.嵌套加密:举个例子,用户的密码是password,之前用的md5存储,现在更换为argon2i,那么:
老的已经md5的密码全部做一次argon2i后入库:
argon2i(md5(password)) #代码语法不对,表示含义而已
3.登陆时验证并切换进入新算法
数据库新增一个密码是否更新算法的字段。在登陆的时候,当用户输入密码,发现没有更新算法,使用老算法做验证,验证成功后视情况调用两步验证验明正身,验证后使用新算法加密密码后入库。
记录一次持续集成的代码更新监控两种实现方式
持续集成是一种软件开发的实践,通过持续集成,可以快速完成调试、测试等过程,在软件开发时提高开发效率。
这里的持续集成将会通过两种不同的方案来实现。整体流程均如下:
git仓库代码更新 --> 集成系统检测到代码更新 --> 集成系统获取新代码 --> 集成系统编译/打包/上线新代码
在获取代码更新的时候,有两种方案,一种是通过webhook来实现:
https://developer.github.com/webhooks/
webhook是一种callback的形式。简单的说,在这篇文章的环境下,就是每次更新后,git系统都会通知集成系统 代码已经更新,剩下的交由集成系统完成。
缺点:webhook需要集成系统对外暴露一个回调接口,如果出现集成系统部署在内网,git系统在外网,又难以实现端口映射等对外暴露回调接口的时候,就需要让集成系统去主动查询,也就是下面这种方案
第二种方案是:集成系统定时查询和更新git仓库上代码:
通过crontab等方式,定时启动集成系统的更新查询模块,当查询到的版本号与集成系统本地代码的版本号不同的时候,启动持续集成的后续流程。
上次基于第二种实现,写了一个内网gitbook自动更新的功能。然后重装代码丢了,就不上代码了。圣诞快乐
记一次通过Nginx为移动端和PC端返回不同页面内容且不影响的URL的处理方案
首先说下需求,由于WEB没写响应式页面,而是写了独立的PC和移动页面,导致必须要通过其他方式判断用户设备并且给出相应内容
初步的解决方案是
- 通过前端JS跳转
- 额外写一个index 隐藏跳转过程和url,根据用户UA加载移动端或者PC端代码
- 通过服务端判断用户UA 返回不同内容
讨论结果是
- 通过前端JS跳转会导致移动端URL暴露,在用户做二次分享的时候体验也不好
- 额外写一个index来动态加载代码的方法我觉得挺棒的,但是前端太懒了不想写
- 通过Nginx判断UA 返回内容,并且保证URL不变
好吧那就开写
先交代服务器情况 /home/www/ 是根目录 PC代码在test里 移动端代码在 test/mobile里
最先用的 if 里嵌套 alias 的方法 代码如下(注意:这种代码是错误的)
location /test/ {
if ( $http_user_agent ~ "(iPhone)|(Android)" ){
alias /home/www/test/mobile/;
}
但是Nginx提示这种语法不支持。。。。
报错内容
nginx: [emerg] "alias" directive is not allowed here in /etc/nginx/sites-enabled/default:49
关于if的各种坑,可以查看 https://xwsoul.com/posts/761?tdsourcetag=s_pctim_aiomsg
感觉写的还不错
然后咨询和讨论得到两种解决方法
- 通过 rewrite 和 location 做两次处理
- 通过 if 内嵌变量,然后把用alias+变量的方法间接处理
上代码
方案一
location ~ ^/test(/.*) {
set $way $1;
if ( $http_user_agent ~ "(iPhone)|(Android)" ){
rewrite ^ fuckurl$way;
}
}
location fuckurl/ {
internal;
alias /home/www/test/mobile/;
}
方案二
location /test/ {
set $getdir "/home/www/test/";
if ( $http_user_agent ~ "(iPhone)|(Android)" ){
set $getdir "/home/www/test/mobile/";
}
alias $getdir;
}
都实测过了,代码能用
Proxmox 第一次部署经历
由于要去托管一台机器,由于机房运维方式过于古老,如果直接在机器系统上操作,出了问题需要找客服来手动维修,所以考虑使用虚拟化方案,最先本来只了解到QEMU Docker LXC 等方案。咨询学长后了解到Proxmox的解决方案,它可以一次性管理Kvm和LXC的虚拟化方案,同时提供图形化界面,而且经过使用后,真的觉得其易用性非常到位。
首先是安装:
系统基础平台使用Debian9.4,安装参考
https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_Stretch
首先是修改主机名
一定要按照要求改,例如主机名为 49tql 公网IP是49.49.49.49
那么一定要添加
49.49.49.49 49tql.proxmox.com 49tql pvelocalhost
这个浪费了我几个小时。
然后开始加入他的源,
echo "deb [arch=amd64] http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
下载GPG
wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg
开始更新
apt update && apt dist-upgrade
开始正式安装
apt install proxmox-ve postfix open-iscsi
会让你选择一个邮件服务器的什么玩意,不知道是啥,按照他的提示,如果不知道,就选local only
然后,重启服务器
reboot
重启后应该就能打开它的web管理页面了
注意页面是https
进去后先加网桥,
名称 vmbr0
IP地址 192.168.3.1自己想个内网
掩码 255.255.255.0自己写
桥接端口 eno0写你的网卡名字
其他都不要填
然后开NAT 和 IP转发
iptables -t nat -I POSTROUTING -s 192.168.3.0/24 -o eno1 -j MASQUERADE
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/50-ip_forward.conf && sysctl -p --system
接下来是把刚才的iptables持久化
apt install netfilter-persistent iptables-persistent
netfilter-persistent save
然后就可以开小鸡了,KVM 的直接下载官方安装镜像,放到 /var/lib/vz/template/iso
然后挂载成CD后进虚拟机开始安装。
小鸡里面静态IP写刚才的内网IP段内的,网关也写刚才那里面的 192.168.3.1 (这个可以自定义网段)。
好像差不多就这样了,剩下的还有端口转发,也用iptab写,我还没操作。先去买服务器了