安全 – 常见 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 反向代理, 这种情况.
它会通过一些手法骗过代理, 让它分发错误的信息给服务器.
我没有用过 load banlance 和反向代理, 所以也不清楚它具体怎样 hack.
HTTP Response Splitting
参考:
它也有点像 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
DDoS 和 CC Attack
DDoS 攻击就是一直访问你的服务器, 造成巨大的压力, 让服务器卡死掉. 阻止它的方法一般上是去检查 IP, 放 cookie 做识别.
然后阻止它一直访问. 自己防的话, 也是挺多工作要做的.