这几年我其实很少直接写 coding 的博文,主要是无聊:浅了没必要重写一遍,深的也不能比别人讲更好。不过最近有同事遇到问题,我刚好有一丁点独创研究,权且记录下来。
假设现在我们负责开发一个后端项目,其中有一个接口,需要接收前端用户上传的文件,然后转发上传到其他后端服务。用户上传的文件在 Java 的 Spring MVC 框架中用 org.springframework.web.multipart.MultipartFile 接收。通常我们会在 Controller 中写一个方法,以 MultipartFile[] 作为入参,接收多个文件。单个文件同理,本文不再赘述。
古董级手机小米 4c 被我翻出来,刚好用作测试机抓取网络包排查 APP 问题。趁这个机会记录相关步骤供参考。
本文假定读者已经对刷机、抓包有一定基础,能够搜索相关资源工具。因为这篇文章更像是一份备忘而不是指导,我实际上懒得写得大而全,如果强求那么几乎永远不会发布。
配置 HTTP/HTTPS 网站时,Nginx 默认不严格校验 Host/SNI 字段。也就是说,假如我们只配置了 server_name example.com www.example.com,但用户使用 IP 地址访问,仍然会访问到这个网站(server);如果有一个别的什么域名解析到这个 IP 地址,也是一样。
这有时候会造成安全问题。互联网时时刻刻有机器人在扫描,使用 http://、https:// 加上各个 IP 地址访问,记录下使用的 IP 地址以及响应结果。我们可能使用 CDN 隐藏真实 IP 地址,但假若不限制 IP 直接访问,相应网站的真实 IP 地址仍然会被记录下来进而泄露。在另一些情况下,传闻会造成误判滥用导致政策性封禁,不过这应多发于 HTTP 网站。
这篇文章是我的 Linux 操作系统课大作业(PPT 材料)。发在这里是供自己和大家参考,如有错误或不当敬请指正。
从官方源安装 Nginx
安装 Nginx 其实很简单。
大多数的 Linux 发行版自带的源已经包含 Nginx。因此只需要一行命令:
这篇文章是我的电子商务课大作业。发在这里是供自己和大家参考,如有错误敬请指正。
SSL 和 TLS 实际上是两种协议。SSL 全称 Secure Sockets Layer,即“安全套接层”;TLS 全称 Transport Layer Security,为“传输层安全性协议”。SSL 可以看作是 TLS 的前身。两者的地位和作用基本相同。因此,尽管当今万维网(World Wide Web,简称 Web)上使用最广泛的 HTTPS 是 HTTP over TLS 而非 HTTP over SSL(SSL 反而是淘汰的协议),人们经常还是只说 SSL,就有包含 TLS 的意思,或者严谨如我则写成 SSL/TLS。
大家知道,HTTPS 协议有一个字段叫 SNI,用来标识所访问的具体目标服务(如某某网站)。有了 SNI,服务器即使只有一个 IP 地址,也可以承载多个不同域名的网站,每个网站(域名)可以配置独立的 SSL 证书。在现实世界中,SNI 的值通常是所需要访问的域名。
我在流量统计后台发现,很多人还对名叫“sniproxy”的东西感兴趣。SNI Proxy 是一个开源程序,可以根据 SNI 字段转发 HTTPS 流量。在当时我并不感兴趣,后来自然产生需求后,觉得有时这工具还挺有用。
有时候,我们需要在网页中显示访问者的 IP 地址。比如,需要获取某客户端的公网 IP,然后添加为域名的解析记录,使域名成为 DDNS 域名。如果是现成的 DDNS 服务,大概能从请求中提取客户端 IP 地址,而倘若是自行请求 DNS 服务商 API 修改记录,那就需要指定 A/AAAA 记录的值为何。
本文假定这样一个需求:直接在浏览器输入某个网址(或者用 curl 请求一个 URL),响应内容为客户端的 IP 地址。其实有很多现成的服务,自己搭一个也很容易。但是公开服务的可靠性存疑,自己搭又需要专门购置域名,配置服务器 vhost,似乎有割鸡用宰牛刀之嫌,因此借助 CDN 服务似乎是一条可行之路。
我常买 Linux VPS,有一套统一的初始化配置,一条条命令复制粘贴执行很有感觉。其中包括利用 NTP 进行时钟同步。但是有些服务商会屏蔽 NTP 协议,可能是出于安全原因。于是得另寻他法。
稍微搜了一下,发现有两条路,都是利用现有 HTTP 服务进行同步的。一种利用响应体(response body),一种利用响应头(response header)。很有意思。
近两年追 Web 新特性,像 HTTP/2、TLS 1.3,刚好网站现在又是运行在 VPS 上的(而不是虚拟主机),相关组件都能自己定制。尝试过几个 Nginx、OpenSSL 相关的补丁(patch),本来想单独好好介绍一番,拖到现在,不如总结成简短一篇,聊胜于无。
这些补丁主要是有关 SPDY 和 chacha20 加密算法的。注意应当只用于测试,不要用于正式环境。
已经不能算是“新”闻了,但还是稍微写一下,大家注意一下吧。
Linux 上著名的包管理工具 APT 曝出严重安全漏洞 CVE-2019-3462,描述为 Content injection in APT http method when using redirects,可使中间人(或者恶意镜像源本身)利用 HTTP 重定向于正执行安装更新操作的机器上(以 root 权限)执行任意代码。使用 APT 的发行版包括但不限于 Debian 和 Ubuntu,均受影响。