安全,永远是最基本的产品需求
web 安全是我们日常开发中既重要,又显得不那么重要的事情。
重要,是因为一旦出了安全事故,影响都会非常大,公司业务价值越大损失越惨重;
说不重要,是因为很多时候我们的公司业务没那么值钱,总是把开发业务放在第一位。至于安不安全,还是先等完成功能之后再说吧 :)
但是作为一个有追求的前端工程师,我觉得还是很有必要把 web 安全知识这块的知识系统的梳理一下,彻底弄明白。
那么,web 攻击常见的种类有哪些呢?
web 攻击种类
- XSS:跨站脚本攻击
- CSRF:跨站请求伪造
- SQL 注入:攻击者的输入,作为查询语句的一部分执行了
- DDoS:短时间内发起大量的请求,使服务器瘫痪
- 其他的还有类似 命令行注入、流量劫持(DNS 劫持、HTTP 劫持)、服务器漏洞(越权、目录遍历、物理路径暴露漏洞、源码暴露漏洞) 等
- 社会工程学手段(这个主要靠冒充和信息泄露来完成,一般不依靠纯技术手段实现)
每种攻击的原理和怎么防御相信大部分人已经大致了解了,完全没听过可能需要去 Google 或百度补课。下面只列一下平常容易被我们忽视的点。
容易漏掉的点
- XSS分为反射型、存储型和 DOM based XSS
-
window.setInterval("{插入参数}")
,由于该函数的第一个参数是回调参数,是无法用基本过滤来解决 XSS 风险的 - 存储型 XSS 如果存在于访问量很大的页面,也可以被用来进行 DDOS 攻击
- 在Headers中设置 Cookie 的时候,可以将 session_id 等关键信息设置
Secure
、HttpOnly
来防范 XSS - 设置
X-Xss-Protection: 1;mode=block
响应头,可以开启浏览器内置的 XSS 保护功能 - 设置 CSP 头部(Content-Security-Policy),可以限制页面只从指定的域名加载资源,限制 XSS 风险
- CSRF 预防:
- 使用合适的 HTTP 方法:GET 方法仅用于读取、查询操作,使用 POST(PUT/PATCH/DELETE)来修改服务器的状态
- 在表单中添加 form token(隐藏域中的随机字符串 )
- 请求 Referer 验证能解决部分问题,有的浏览器可以可以纂改 Referer 值
- 关键请求使用验证码,或二次校验
- CSRF 通常从第三方网站发起,攻击请求“冒用”受害者在被攻击网站的登录凭证(cookie中的sessionId)
- 转义字符,白名单永远优于黑名单
- 撞库攻击 是指黑客通过收集互联网上已经泄露的用户名和密码信息,生成字典表,批量尝试登录其他网站,危害很大
网友评论