天天看点

安全 – 常见 Web 攻击

前言

最近在研究 WAF, 顺便记入一下常见的 Web 攻击.

SQL Injection

SQL injection 是指程序员直接拿 client input, 拼接到 SQL query 中. 从而导致 client 有能力可以操作 SQL.

这个是年代久远的攻击了. 现在一般上都会使用 parameter 的方式把 client input 输入进 query 里, 而不是用拼接. 

或者直接用 ORM 框架. 跳过写 query 这个环节.

不只是 SQL Injection, 任何一种 XXX injection 原理都是一样的, 程序员对 client input 使用要敏感一些.

不要拿了就用, 要假设 client 都是坏人, 用他们给的东西要先检查, 限制, 过滤. 

比如用 Enum, int, 正则去确保用户只能给小范围的表达, 使用的时候要依据场合做 encode. 

除了 SQL, 经常会用到 client input 做逻辑的还有 : Path, 反射调用, rich text 等等

Cross-site Scripting (XSS)

也算 injection 的一种, 它指的是用 client input 去拼接 HTML. 从而导致 client 有能力操作 HTML 页面.

解决方法就是消毒. 限制. 过滤, Encode, 就那一套啦. 

Command Injection

也是 injection 的一种, 只是攻击的地方是调用 shell 这类的, 所以叫 command injection. 

参考: 详解php命令注入攻击

解决方法一样.

HTTP Request Smuggling

请求走私, 这个只会发生在, 有用 load balance, reverve proxy 反向代理, 这种情况. 

它会通过一些手法骗过代理, 让它分发错误的信息给服务器. 

安全 – 常见 Web 攻击

我没有用过 load banlance 和反向代理, 所以也不清楚它具体怎样 hack.

HTTP Response Splitting

参考: 

HTTP Response Splitting 攻击

浅谈HTTP响应拆分攻击

它也有点像 injection, 服务器在处理 302 时把 client input 直接写入 header location 里, 导致了 client 有能力控制 response.

我没有深入研究, 想了解更多看上面的链接吧. 解决方法还是一样.

Remote File Inclusion

参考: 前端 RFI详解

也算 injection 的一种, 直接用 client input 去拼接 file path.

其它

其余的还有 HTTP 协议检查, user-agent, accept headers, IIS configuration, protect 爬虫, scanner 等等啦.

详细的 rules 保护看这里 Web Application Firewall CRS rule groups and rules

此外, 它还防 DDos attack

安全 – 常见 Web 攻击

DDoS 和 CC Attack

参考: DDoS攻击和CC攻击有什么区别?

DDoS 攻击就是一直访问你的服务器, 造成巨大的压力, 让服务器卡死掉. 阻止它的方法一般上是去检查 IP, 放 cookie 做识别.

然后阻止它一直访问. 自己防的话, 也是挺多工作要做的.