Write the Code. Change the World.

分类目录
11月 21

随着各个平台(github,阿里云,等)都开始使用 MFA 来增加软件使用的安全性。对软件进行 MFA 处理还是有必要。有些平台已经在强制使用了。

MFA(Multi-factor Authentication,多因素认证)是一种安全实践,它要求用户提供两种或两种以上的认证因素来验证身份,以增强账户和系统的安全性。

TOTP(Time-Based One-Time Password,基于时间的一次性密码)是一种基于时间的一次性密码算法,通常用于两步验证和多因素身份验证,以增强静态口令认证的安全性。它由互联网工程任务组(IETF)在RFC 6238中定义,是HOTP(基于哈希的消息认证码的一次性密码算法)的扩展,添加了时间因素。

TOTP 可以是 MFA 的一部分。

MFA 的工作原理

MFA的目的是建立一个多层次的防御,使未经授权的人访问计算机系统或网络更加困难,从而提高安全性。

MFA通常包括以下三个要素之一或多个的组合:

  1. 知识因素(用户知道的东西):如密码、PIN码、答案问题。
  2. 所有权因素(用户拥有的东西):如手机、硬件令牌、电子邮件。
  3. 生物特征因素(用户所具有的东西):如指纹、虹膜、面部识别

实现MFA的基本步骤通常包括:

  1. 第一步验证(通常是密码):用户输入用户名和密码,数据库对其进行验证。
  2. 第二步验证(如一次性密码 OTP):如果第一步验证通过,用户会收到一个一次性密码(OTP),通常通过短信、电子邮件或身份验证器应用生成。用户需要输入这个OTP。
  3. 验证通过:系统验证OTP的有效性,如果正确,则允许用户访问资源。

MFA的实现方法:
MFA可以通过多种方式实现,以下是一些常见的方法:

  1. 双因素身份验证(2FA):这是最常见的MFA形式,包括两个身份验证步骤,例如输入密码后,向用户的手机或电子邮件发送一次性密码(OTP)。

  2. 身份验证器软件:身份验证器软件会生成基于时间的一次性密码(TOTP),供用户在输入密码后使用。

  3. 硬件令牌:用户可以携带的物理设备,如安全密钥,用于生成一次性密码或提供认证响应。短信或电子邮件验证码:向用户的手机号或邮箱发送验证码,用户需要输入这个验证码来完成认证。

简要

上边这些,都是一些文字的简要介绍。真正的使用场景可以这样。

比如,先账号密码登录或扫码登录。这一步验证通过后,再进行短信验证或 TOTP 验证。毕竟短信的使用是有费用成本,使用 TOTP 来实现验证就是一个省钱的方式。只是 TOTP 也是需要客户端来做支撑。(自己开发或让用户使用市面上成熟的工具)

9月 12

分析 app 接口数据,对 app 请求进行抓包是必要的一步。比如想做一个自动抢票系统,在对方没有提供 api 给予抢票时,就得需要自己去抓包分析请求。虽然这样不一定能成功,却是要走的一步。charles 是一个很不错的抓包工具,是一个付费工具。利用 charles 进行抓包需要走一下几步。

抓包步骤

  1. 下载安装 charles。 https://www.charlesproxy.com/latest-release/download.do
  2. 获取激活码。 https://www.zzzmode.com/mytools/charles/
  3. 通过上边的激活码,激活 charles。
  4. 配置(mac 端证书,手机端证书,代理接口等)。 https://blog.csdn.net/pan_jiabao/article/details/123126053

乱码配置

上边这些做好之后,手机端运行程序发起的 https 请求, mac 端的 charles 都能抓取到。可是在查看数据时,发现都是乱码。不是乱码更好了。如果是乱码,就处理处理。

  1. 依次点击顶部菜单。 Proxy->SSL Proxying Settings.

  2. Enable SSL Proxying 打勾,并且添加 include 配置。这里可以添加 :。允许所有的域名和端口号。这样设置之后,乱码应该就没了。至少我是没了。

5月 29

fontawesome 字体。如果主题中直接引用 cdn 的字体,经常出现 404 等情况。可以将字体下载下来,放在主题目录下,使用本地的会更好。
https://fontawesome.dashgame.com/#google_vignette

获取当前主题的 url。比如存在某个主题 A,在主题 A 下有 ·/css/your-stylesheet.css 文件,就可以通过下边的方法来处理。这样渲染出来就是 https://xxx.com/xx/xx/css/your-stylesheet.css。 如果你的域名是 https://xxx.com 的话。这样就可以防止硬编码了。

<link rel="stylesheet" type="text/css" href="<?php echo get_template_directory_uri(); ?>/css/your-stylesheet.css">

自言自语

在 wordpress 中,我安装了一个主题,在这个主题的 header.php 中,我引用了该文件夹下的一个 css 文件,怎么获取当前的 css 文件的路径呢

5月 26

brotli 有很好的解压缩效率,但 nginx 默认又不包含 brotli 模块,只能额外搞了

步骤

  1. 准备 Dockerfile 文件
  2. 准备 nginx.conf 文件
  3. 准备 docker-compose.yaml 文件
  4. 生成镜像,构建容器

准备 dockerfile

# 创建一个 env 目录,基于该目录为项目根目录
mkdir env && cd env

# 下载 Dockerfile
curl -o docker/nginx/Dockerfile https://raw.githubusercontent.com/nginxinc/docker-nginx/master/modules/Dockerfile

准备 nginx.conf

https://github.com/google/ngx_brotli/blob/master/README.md

这里 nginx.conf 位于 ./conf/nginx/nginx.conf 中。

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

 load_module modules/ngx_http_brotli_filter_module.so;
 load_module modules/ngx_http_brotli_static_module.so;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
     brotli on;
    include /etc/nginx/conf.d/*.conf;
}

准备 docker-compose.yaml 文件

docker-compose.yaml 文件直接就在项目根目录下。

…
nginx:
    build:
      context: ./docker/nginx
      args:
        ENABLED_MODULES: brotli
    image: xr-nginx-brotli
    container_name: xr-nginx-brotli
    restart: always
    privileged: false
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./conf/nginx/nginx.conf:/etc/nginx/nginx.conf

生成镜像,构建容器

# 生成镜像
docker-compose build nginx

# 构建启动容器
docker-compose up

其实,可以直接执行 docker-compose up, 没有镜像的时候,会先去生成镜像的

检查

当你发起请求经过 nginx 时,返回的请求头中有 Accept-Encoding: br 表示 brotli 生效了。

相关文章

https://github.com/nginxinc/docker-nginx/tree/master/modules

https://github.com/google/brotli/

https://github.com/google/ngx_brotli

https://github.com/nginxinc/docker-nginx/issues/332

5月 13

在 git 版本工具中,同一个公钥只允许配置一个。假如你有多个电脑,多个账号,多个项目需要进行代码上传下载。这个时候就处理不好。

有这样一个场景:
在 A 电脑,有一个 a 项目,上传到 a 账号的 github 上。
继续,在 A 电脑,有一个 b 项目,上传到 b 账号的 github 上。

如果想使用 ssh-key 的授权方式来上传代码。同一个 ssh-key 只能配置在一个账号里。也就是对于同一个 git 平台,同一个 ssh-key 只能有一份。于是,你就只能再去创建一个新的 ssh-key,然后配置另外一个账号里。

这样的确是可以配置进去了。但是,当你上传代码的时候,会提示授权不过。因为,git 没指定 ssk-key 的时候,会使用默认的公私钥,就是 id_rsa。这个时候,就需要在特定项目,指定也定的 ssh-key 就实现了。

生成 ssh-key

ssh-keygen -t rsa -C xxx@xx.com -f xxx-github

指定 ssh-key

方式一(到当前目录下):

git config core.sshCommand "ssh -i ~/.ssh/xxx-github"

方式二

# 添加
ssh-add ~/.ssh/xxx-github

# 删除
ssh-add -d ~/.ssh/xxx-github

# 查看
ssh-add -l

推荐使用方式一,这样每个项目都会对应好自己的 ssh-key,不会影响其他的项目。

历史

https://blog.vini123.com/1070

https://blog.vini123.com/1134

4月 30

docker 容器中运行 python 项目时,报 RuntimeError: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx 错误,这个时候需要 docker 开启 nvidia engin 的支持。至少电脑是装了 nvidia 的显卡的。

docker 中启用 nvidia:
https://blog.vini123.com/1206

4月 30

在 docker 中,docker-compose.yaml 配置了 nvida 参数时,执行 docker-compose up -d 时报docker: Error response from daemon: unknown or invalid runtime name: nvidia 错误。

如果是非 win 系统,修改 /etc/docker/daemon.json,并添加以下配置。

{
  "runtimes": {
    "nvidia": {
      "path": "nvidia-container-runtime",
      "runtimeArgs": []
    }
  },
  "default-runtime": "nvidia"
}

然后重启 docker

如果是 win 系统,需要手动打开 docker 桌面应用,点击右上角的设置,进入 docker engine 项进行配置。配置内容也是和上边的一样。如下截图。

1月 22

不科学上网的操作

依次访问:

找到 DNS Resource Records 下的 ip 地址。依次加入到 hosts 中。

# mac 的
sudo vim /etc/hosts

140.82.113.4 github.com
151.101.1.194 github.global.ssl.fastly.net

这样再提交代码,估计就可以了。至少我试过是可以了的。

不行,刷新 DNS 缓存试试。

sudo killall -HUP mDNSResponder

参考

https://juejin.cn/post/7324866317206585394