小森林

如何设计 Mongodb 的数据模型

公司的存储服务上线后,我遇到过很多次使用 MySQL 的表设计模式来设计 Mongodb 存储模型的服务,并在服务拓展后遇到 Mongodb 不支持数据库级别的 join 而觉得它不好用的情况(其他还有如事务、外键等等)。 在使用了一段时间 Mongodb 后,我觉得这些评价是有失公允的,Mongodb 有它适应的场景,不应该处处同 MySQL 比较。比如不支持 join 我们可以通过应用级......

什么是 XSS 攻击

XSS 的全称是 Cross Site Scripting,为了避免同 CSS 的缩写重复所以用了 XSS 代替,相比于上一篇介绍的 CSRF 攻击,XSS 攻击的威力更大,它可以直接在用户当前正在浏览的页面运行自定义的 javascript 脚本,操作得当的话可以污染浏览这个页面的所有用户。 XSS 主要分为三类:存储型、反射型和 DOM 型(目前主流是前后端分离,反射型不如 DOM 型常......

CSRF 攻击是什么

CSRF 的全称是 Cross-site request forgery,中文翻译是跨站请求伪造,绝大部分网站会使用 cookie 保存用户当前的登录状态,在我们请求对应站点 API 时 cookie 也会自动携带,攻击者就是利用了这一点从站外向目标站点发出请求,利用 cookie 自动发送的特性发起攻击。 举个例子: 1<img src="//shijianan.com/user/l......

HTTP 头 X-FORWARDED-FOR

Disqus 被墙以后配置了一个反向代理去调 Disqus api,那个服务到现在运行的还不错,美中不足的是经过了一层反向代理后我们丢掉了用户的 IP 信息,最终提交给 Disqus 的只有转发服务器的 IP,这样所有用户的请求都来自于同一个 IP,假如要展示访客地区分布就捉🐔了。 反向代理对于用户来说是透明的,客户端并不知道这个接口后面有几层代理,而最后一层代理甚至有可能不知道真实用户的......

小巧好用的压力测试工具 wrk

上周服务被打挂了一次,发现的时候 CPU + Memory 几乎被占满,但是请求并发量只有 ~50 左右。修复 + 重启以后一直在想平时怎么在日常自测服务,压力测试需要联系公司专门的团队 + 排期并不十分方便,佳浩老师给推荐了 wrk,这里记录一下使用心得。 wrk 的官网关于用法介绍的挺详细的,这里就只简单举一个例子: 1wrk -t4 -c100 -d10s -T30s --latenc......

Nginx HTTPS 性能调优

相比于普通的 HTTP 请求,HTTPS 请求需要占用更多的资源用于 TLS 协议、证书的验证、请求实体的加密验证等等,最直观的体验就是访问 HTTPS 的网站会比访问 HTTP 协议的网站要慢(不支持 http2 的话)。 本篇文章我们来看一下如何在服务端优化 HTTPS 请求,文中以 Nginx 为例。 Session Cache 和 Session Ticket Session Cac......

HSTS 是什么

网站开启 HTTPS 之后,通常我们希望将 80 端口通过 HTTP 协议访问的流量也导到 HTTPS 443 端口,自此在服务或站点上就不用为劫持和中间人费心了。 要做到这点很简单,在服务器上将 80 端口的请求 302 到 443 端口即可: 12345678910server { listen 80; server_name shijianan.com www.s......

HTTPS 证书原理

大家都说 HTTPS 传输是安全的,因为是基于 SSL 的,不过无论是基于任何协议,都有可以被中间人(MITM)攻击,甚至上一篇文章的代理也可以称做是中间人,因此 HTTPS 还涉及到了一个概念:证书。 访问一个支持 https 的网站即可查看它的证书信息: 证书是由 CA 颁发的,这套体系是基于公私钥,通常浏览器内部会内置合法流行的 CA 公钥,而私钥自然是存在服务器端。证书的签发和验证......

使用 Nginx 搭建一个透明的 HTTPS 代理

前几天看到一个观点「不用 HTTPS 的网站都是耍流氓」,话说的虽然激进了点,但现在不支持 HTTPS 网站的稀有程度堪比 🐼。很多博主通过 hexo 把博客 host 在 Github Pages 服务上,github.io 本身是有证书的,所以访问 yourname.github.io 是有 HTTPS 认证的,这样如果用自己的域名就没法进行 HTTPS 认证了,这篇文章主要说下我是......

async/await 的常见问题

在 Nodejs 中编写异步代码一直饱受诟病,基于回调函数的原理很容易写出 “箭头型” 代码,有的人甚至因此对 node 产生了阴影。在那之后相继出现 Promise,Generator 和 async/await 试图从语法层面解决这一问题,自 Nodejs 7 中原生支持 async/await 后大部分 nodejs 开发者应该都在用了,本篇文章我们来探讨一些在使用 async/aw......