常见安全漏洞及解决方案

概述:常见的安全漏洞:

漏洞名称
漏洞背景
避免方法
解决方案
CSRF
(跨站请求伪装)
攻击者诱导用户点击连接,用户浏览器携带cookie成功请求服务器,造成用户信息丢失。
  • 验证 HTTP Referer 字段
  • token验证机制
  • 验证码
spring-boot-security-csrf
XSS
(CSS,跨站脚本攻击)
恶意攻击者往web页面插入恶意js代码,当用户浏览时潜入的代码会被执行,从而控制用户的浏览器。
  • 过滤特殊字符
  • 使用HTTP头指定类型
spring-boot-security-xss
SQL注入
外部输入参数在拼接时,没有和数据库语句做严格区分,导致攻击者注入自定义的数据库语句,从而非预期地操作数据库。
预编译sql语句。对mybatis而言,可用#{}代替${}。
Jsonp劫持
jsonp存在非法站点恶意调用、callback参数恶意添加标签-XSS漏洞等问题。
  • refer白名单匹配
  • callback参数检查
spring-boot-security-jsonp
DoS攻击
伪造请求,建立大量的半连接,使服务器连接队列满,导致拒绝服务。
设计安全:
越权访问 https://www.jianshu.com/p/4d673e4ab5a7
脱敏:在对用户敏感信息(密码、密钥、信用卡、借记卡、个人信息(身份证,姓名,tel,mail,add,uid))进行展示/使用时,应遵循一些原则,以防止用户信息泄露。
对于一些用户敏感信息,在前后端传输过程中,需要加密处理,以防被监听而泄露。可以使用Http手动加密和Https。对于Http,客户端收到用户键入的敏感信息后,可以考虑使用base64编码或者加密处理后,发送到后端。

CSRF

GET 请求,用一个就可以实现CSRF攻击,但是GET请求的CSRF攻击不用防范,前提是我们的接口设计要保证符合HTTP规范,即是:GET请求应该是幂等的,不涉及数据状态的更新。(幂等,我们可以理解为强一致:读:每次的结果都一致。写:连续调用10次的结果,要保证写不会重复。另外,当我们调用其他的业务接口时,当出现失败,要保证结果一定是失败,即保证一致)。
POST 表单提交:这个CSRF可以进行攻击,模拟表单提交。解决方案就是服务器使用随机生成的token,嵌入到表单中,CSRF无法获得此表单的token值。当进行表单提交时,我们先验证此token是否合法。框架解决方案是:Spring-security。
增加可信任的域。验证HTTP的refer头,看是否是信任的域发起的请求。
可参考:
https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/

XSS

由攻击者输入恶意数据保存在数据库,再由服务器脚本程序从数据库中读取数据,然后显示在公共显示的固定页面上,那么所有浏览该页面的用户都会被攻击。由于攻击者输入恶意数据保存在数据库,再由服务器脚本程序从数据库中读取数据。所以大部分的存储型XSS漏洞都是在表单提交上会发生的。比如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie等。        
    只要有form表单提交,并且回显逻辑时,当一个虚假的黑客在表单中提交js代码时,回显页面时,js执行引擎解释这段危险代码,会造成比较严重的问题。比如:流量劫持,弹窗,钓鱼等。。。json回写时,需要经过security的一层转义。
     但是对于接口来说,你伪造一个账号来攻击我的接口是不行的,dos攻击时,当出现ip超过一定的阈值后,会禁止掉。
如果A提交的内容影响到了B,比如A提交信息时写了一段js代码,当上游B去查看时,这个js代码就会执行,所以会影响B。如果只影响A,那么就不用去解决,因为对自己负责。
     跨站点脚本攻击(为了不跟CSS混淆,叫XSS),在网页中插入恶意的Java script脚本代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。比如:在留言板插入下边的脚本内容:
<script>alert(“hey!you are attacked”)</script>
这样,用户在访问此留言板时,就会弹出提醒框。
XSS攻击可以:窃取用户cookie值,劫持流量向某个网页跳转等。
可用:过滤特殊字符,使用HTTP头指定类型解决。 框架解决方案是:Spring-security。

Jsonp劫持

JSON是一种基于文本的数据交换方式,或者叫做数据描述格式。Jsonp用来跨域。一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准。另外:我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如

你可能感兴趣的:(计算机网络,Web开发)