• 用最简单方法解决api接口安全问题,几乎无法破解

    场景描述

    项目需要为第三方提供api服务接口。接口涉及到核心功能,如何保证接口安全。防止伪造身份、篡改数据?

    思路

    保障数据安全最好的方法,当然是加密了。无法解析内容,自然无法伪造,篡改。
    
    可是使用https证书需要收费的。有其它方法么?
    
    有的。
    
    消息哈希认证(hmac)。
    

    算法描述

    • 访问者
    1. 当访问接口时, 将参数按key值排序,组成key1=value1&key2=value2&....&secret_key=...
    2. 然后对上面结果做md5,生成签名sign
    3. 将sign放到加入请求的参数
    
    • 被访问者
    密钥是被访问者提供了,它也有访问者的secret_key.
    1.根据app_id查到secret_key
    2.处理请求参数,按规则组成key1=value1&key2=value2....&secret_key=...
    3.对上一步结果做md5,生成sign。比较两个sign,相等则身份验证通过
    

    Read More »

  • 没有契合的数据库迁移工具,用pymysql实现一个

    版本迭代少不了数据迁移,python有自己的数据库迁移工具migrate。如果有的是其它开发语言,或者没有契合的迁移工具。

    怎么自己做一个?

    环境说明

    项目开发语言:java
    数据库: mysql
    迁移脚本: python
    python工具包: pymysql
    

    实现思路

    目标是将老版本的数据转为新版本的数据。

    1. show tables 查询所有的表  ---得到所有表名
    2. 注意trancate table_name 保证新表干净  -- 清环境
    3. python在执行sql后可以在游标的属性cursor.description中看到表的字段信息  -- 得到所有字段名、类型
    4. 查询数据生成insert语句。版本之间有变化的做特殊处理  --数据映射
    5. 每生成500条commit一次到新库   -- 批量commit
    6. mysqldump一份数据,在开发环境做好测试,没问题就可以用了。
    

    Read More »

  • nginx运行php的终极方法,可避免许多不必要的坑

    说明

    php有许多开源项目比较好像,在自己的机器上用docker搭建了很多。

    每个docker都是跑了个apache,每个docker里面都有apache。

    这样好像有点浪费资源,而平时都是用nginx,所以研究了用nginx运行php

    中间竟然碰到许多坑,而回过头来看,其实都很简单。

    nginx运行php的原理

    nginx不能解析php,要和php-fpm配置使用。nginx负责将php的请求转给php-fpm解析处理,然后返回响应结果

    nginx运行php会遇到哪些坑

    错误的提示有很多,最基本有"File not found"、"403"、"404"、"nginx no input file specified"等等

    总之能试出许多错误。而归结到底,只有一个根本原因“权限”

    而最好的方法是,直接把nginx和php-fpm设置为root用户运行

    Read More »

  • frp内网穿透基本用法

    思考评价

    由于路由器推荐使用frp进行内网穿透,所以我稍微了解了下。

    平时我更新喜欢用ssh进行内网穿透。似乎并没有必要使用frp。

    更方便的方法是,直接用vpn将两台机器连载一起,也比端口穿透好多了。

    一般说来它比较适合普通人,使用比较简单。

    不打算深入研究,下面比较水

    Read More »

  • rclone报错NewFs: couldn't initialise SFTP: EOF

    rclone将路由器挂载到vps,出现下面错误。

    原因是路由的ssh不支持sftp。

    [root@izwzxxxxxxxqre9xrhvz ~]# rclone lsd homedata:
    2018/12/24 13:57:24 Failed to create file system for "homedata:": NewFs: couldn't initialise SFTP: EOF
    
    
  • entware嵌入到移动硬盘,在路由器重启后不生效

    环境说明

    在路由器r6400上挂载了一个移动硬盘,然后在移动硬盘中安装了entware。

    如果重启了路由器,entware会失效。如何让它在重启时生效呢?

    梅林r6400开机启动原理

    路由器中的操作系统比较特殊

    1. /etc/profile: 系统做了限制不能修改,所以不可以加脚本

    2. /jffs/scripts目录: 里面的脚本名固定不可以随便修改,但是可以加自己的内容。

    脚本名 作用
    post-mount 在挂载磁盘后调用
    nat-start 在nat配置后调用
    services-start 在系统服务启动后调用
    services-stop 在系统服务器停止前调用
    wan-start 在wan网卡启动后调用

    Read More »

  • 让梅林R6400支持sftp协议

    说明

    通常linux中ssh默认支持sftp,梅林路由器中的ssh是精简版,不支持sftp协议。

    自带的配置不支持,是否有有办法呢?我们可以先装entware-setup.sh,然后用opkg安装sftp。

    有了ssh和sftp,我们可以做很多事。

    Read More »

  • nextcloud搭建私有云盘的几点思考

    为什么选择nextcloud?

    国内网盘死的差不多了,剩下也是限制很多。想到搭一个自己的私有云。

    开源的网盘有owncloud, nextcloud等等,支持桌面、手机,多终端。试了一下,挺好用,速度很快,没有限制。接下来选择用哪个?经过了解nextcloud是owncloud的作者创建的一个分支。两者功能上基本相同,试用了之后,nextcloud更符合我个人的使用习惯,owncloud用起来挺别扭。

    nextcloud官网在国内被墙,需要用科学工具访问。

    Read More »

  • p2p内网穿透技术-udp打洞

    在公司如何访问家里的电脑?实现方法有很多,其它p2p传输文件最快,能否实现?

    udp打洞原理

    假设有两台分别处于各自的私有网络中的主机:A和B;N1和N2是两个网络的NAT设备,分别拥有IP地址P1和P2;S是一个使用了一个众所周知的、从全球任何地方都能访问得到的IP地址的公共服务器
    
    步骤一:A和B分别和S建立UDP连接;NAT设备N1和N2创建UDP转换状态并分配临时的外部端口号
    
    步骤二:S检查UDP包,看A和B的端口是否是正在被使用的(否则的话N1和N2应该是应用了端口随机分配,这会让路由验证变得更麻烦)
    
    步骤三:如果端口不是随机化的,那么A和B各自选择端口X和Y,并告知S。S会让A发送UDP包到P2:Y,让B发送UDP包到P1:X
    
    步骤四:A和B通过转换好的IP地址和端口直接联系到对方的NAT设备;
    

    示意图

    Read More »

  • win10更新彻底禁用

    win10更新非常讨厌,一不注意,重启后自动更新,等半个小时都不能进系统。

    发现大部分的方法是禁用服务。然后每次重启系统后,又发现它被改回来了,也不知道是被什么东西改的。

    组织策略:中禁止所有windows更新

    gpedit.msc

    服务管理: 禁止启动,并且第一次失败后操作改为无操作