Security相关的知识

  • 面临的security的威胁
  • Security的主要的种类
  • XSS
  • CSRF
  • XXE
  • SQL Injection
  • Insecure Deserialization
  • 总结


面临的security的威胁

在我们这个时代,每个系统都面临着被黑客入侵的危险,黑客入侵成功就有可能得到很大的收益,而且这种攻击可以是跨国的,所以追踪起来比较困难,黑客受到惩罚的可能性很小,所以他们也越来越有动力做这些事情。这就对系统的创建和维护者提出了更高的要求。

每次security导致的问题都会造成巨大的损失,这对整个开发团队都是暴击。每次被攻击成功,公司从上层到下层都会有人被牵连。

Security的主要的种类

Security的种类有很多,但是我们一般比较常见的大概有几类。

  1. XSS
  2. CSRF
  3. XXE
  4. SQL Injection
  5. Insecure Deserialization

XSS

XSS(Cross-Site Scripting),比较常见的

<script>alert()</script>
<img scr="" onerror=alert()>

一般防范这种有下面几种方法

  1. escape,让这些<>脚本相关的标签失效。
  2. validation,对于特殊的一些字符<>等做校验,需要注意的是<>这些有很多的表达方式,比如&lt;&lg;&#65124;&#65125;等。
  3. 消除这些特殊的字符。

CSRF

CSRF(Cross-site request forgery),这种攻击一般会采用from表单提交的方式,这样可以避开跨域问题。而对于这种问题的防范:

  1. 验证cookie信息
  2. 验证header里面的referer属性
  3. 惊醒form表单的提交

XXE

XXE(XML External Entity)
xml的entity分为三类,

  1. 外部entity
  2. 内部entity
  3. 参数entity

经常遇到的xxe攻击基本都是XXE攻击,

  1. 防止XXE攻击一般都是禁用掉external entity
  2. 一般要关注第三方的包,跟着它们最新的版本升级,不然会错过一些问题的修复

SQL Injection

sql injection也是一个非常常见的问题,对于这个攻击有一个专门的软件:sqlMap, 可以从github上面得到这个软件,它可以模拟SQL Injection,
https://github.com/sqlmapproject/sqlmap.git

对于sqlInjection的防御方法还是不少的。

  1. 不要自己尝试实现这些SQL,使用那些经过检验的框架。
  2. 尽量限制每次查询的条数,这样就可以精确控制。

Insecure Deserialization

这里以Java举例,Deserialization就是从序列化的数据转换为Java对象的过程。这个转换过程中就可以被注入一些攻击代码。最近FastJson经常被曝这些问题。而对于这类问题的防御和修复手段:

  1. 了解自己使用的API,判断是否会有这种风险
  2. 要经常关注使用的第三方库,保持合适的更新频率。

总结

虽然黑客的攻击我们不能完全都预料到,但是我们要尽量去防范那些高风险,那些会对我们造成重大损失的风险。平时不注意这些,等真正遇到攻击的时候我们就追悔莫及了。