被我们渐忘的 Web 安全

安全,永远是最基本的产品需求

web 安全是我们日常开发中既重要,又显得不那么重要的事情。

重要,是因为一旦出了安全事故,影响都会非常大,公司业务价值越大损失越惨重;
说不重要,是因为很多时候我们的公司业务没那么值钱,总是把开发业务放在第一位。至于安不安全,还是先等完成功能之后再说吧 :)

但是作为一个有追求的前端工程师,我觉得还是很有必要把 web 安全知识这块的知识系统的梳理一下,彻底弄明白。

那么,web 攻击常见的种类有哪些呢?

web 攻击种类

  • XSS:跨站脚本攻击
  • CSRF:跨站请求伪造
  • SQL 注入:攻击者的输入,作为查询语句的一部分执行了
  • DDoS:短时间内发起大量的请求,使服务器瘫痪
  • 其他的还有类似 命令行注入流量劫持(DNS 劫持、HTTP 劫持)、服务器漏洞(越权、目录遍历、物理路径暴露漏洞、源码暴露漏洞) 等
  • 社会工程学手段(这个主要靠冒充和信息泄露来完成,一般不依靠纯技术手段实现)

每种攻击的原理和怎么防御相信大部分人已经大致了解了,完全没听过可能需要去 Google 或百度补课。下面只列一下平常容易被我们忽视的点。

容易漏掉的点

  1. XSS分为反射型存储型DOM based XSS
  2. window.setInterval("{插入参数}"),由于该函数的第一个参数是回调参数,是无法用基本过滤来解决 XSS 风险的
  3. 存储型 XSS 如果存在于访问量很大的页面,也可以被用来进行 DDOS 攻击
  4. 在Headers中设置 Cookie 的时候,可以将 session_id 等关键信息设置Secure(强制使用 https 访问)、HttpOnly(防范 XSS)会更安全
  5. 设置X-Xss-Protection: 1;mode=block 响应头,可以开启浏览器内置的 XSS 保护功能
  6. 设置 CSP 头部(Content-Security-Policy),可以限制页面只从指定的域名加载资源,限制 XSS 风险
  7. CSRF 预防:
  • 使用合适的 HTTP 方法:GET 方法仅用于读取、查询操作,使用 POST(PUT/PATCH/DELETE)来修改服务器的状态
  • 在表单中添加 form token(隐藏域中的随机字符串 )
  • 请求 Referer 验证能解决部分问题,有的浏览器可以可以纂改 Referer 值
  • 关键请求使用验证码,或二次校验
  1. CSRF 通常从第三方网站发起,攻击请求“冒用”受害者在被攻击网站的登录凭证(cookie中的sessionId)。CSRF用于修改服务端数据,而非窃取服务器中的数据(受浏览器同源策略限制)
  2. 转义字符,白名单永远优于黑名单
  3. 撞库攻击 是指黑客通过收集互联网上已经泄露的用户名和密码信息,生成字典表,批量尝试登录其他网站,危害很大
  4. 产生文件上传漏洞的最主要的核心原因是:没有对上传的文件做足够完善的校验,如 文件的类型内容大小
  5. 如果不必要就不要开启CORS,有必要就定义白名单
  6. 子域劫持是个高危互联网安全漏洞,其基本原理是黑客通过注册他人没有续费的云服务子域来恶性控制一个或多个正经网站的域
  7. 子域名劫持:
  • 可以被用来盗取用户身份凭证(cookie)
  • 子域名劫持迷惑性很强,用户难以发现自己进入了被劫持的页面
  • 处理子域名劫持风险的一般做法是删除或修改 DNS 记录使子域名不再指向由劫持者控制的资源
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容