Web常用攻击手段-CSRF攻击
2020-11-19 本文已影响0人
迦叶_金色的人生_荣耀而又辉煌
上一篇 <<<Web常用攻击手段-Http请求防盗链
下一篇 >>>Web常用攻击手段-上传文件漏洞
CSRF攻击:(Cross Site Request Forgery, 跨站域请求伪造),黑客通过抓包工具分析令牌、cookie等信息并伪造客户请求。
就是大家熟知的钓鱼网站。
和XSS的区别
XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站,所以被认为比XSS更具危险性。
如何防御--(使用token令牌)
- 1.服务端提供令牌获取接口,令牌有有效期,存到JVM或redis中
- 客户端每次在调用接口的时候,需要在请求头中传递令牌参数,一旦使用之后,就会被删除,保证每个令牌只能用一次。
异常情况
- a、如果用户提前获取多个token,然后恶意重复提交?
- b、使用httpclient机器模拟请求?
解决办法:
a、启用图形验证码(动态图案)防止机器模拟
b、修改密码、下单、支付、转账等核心业务,通过短信验证码、图片识别和人脸识别灯技术进行二次确认,保证是本人操作。
c、Nginx实现限流并设置黑白名单,请求数达到多少就给拦截进入到黑名单中
public static String getToken() {
// 1.生成令牌,保证全局
String token = UUID.randomUUID().toString();
// 2.存入tokenMap,value可以存真正业务ID,保证使用者拥有token的权限
//ConcurrentHashMap 底层已经保证了线程安全
tokenMap.put(token, token);
return token;
}
// 验证token,并且删除对应的token
public static Boolean exisToken(String token) {
// 1.从集合中获取token
Object result = tokenMap.get(token);
if (result == null) {
return false;
}
// 2.删除对应的token
tokenMap.remove(token);
return true;
}
// 获取Token
@RequestMapping("/getToken")
public String getToken() {
return TokenUtils.getToken();
}
// 验证Token
@RequestMapping(value = "/addOrder", produces = "application/json; charset=utf-8")
public String addOrder(@RequestBody OrderEntity orderEntity, HttpServletRequest request) {
String token = request.getHeader("token");
if (StringUtils.isEmpty(token)) {
return "参数错误!";
}
if (!TokenUtils.exisToken(token)) {
return "请勿重复提交!";
}
int result = orderMapper.addOrder(orderEntity);
return result > 0 ? "添加成功" : "添加失败" + "";
}
SSO的实现方式是token+本地cookie,如何防止被模拟
解决办法:
a、token本身有有效期,但令牌的时间一般都是30天很长
b、生成token时,绑定客户端的设备ID、IP信息、浏览器信息等,有一定的防御效果,但黑客也是会模拟的
c、所有查询返回的数据中,对敏感数据进行脱敏操作
d、核心业务的接口必须加上短信验证码、刷脸验证等,确保是本人在操作。
相关文章链接:
<<<Web常用攻击手段-XSS攻击
<<<Web常用攻击手段-SQL注入
<<<Web常用攻击手段-Http请求防盗链
<<<Web常用攻击手段-上传文件漏洞
<<<Web常用攻击手段-忘记密码
<<<Web常用攻击手段-其他漏洞
<<<安全技术--数据加密/认证技术
<<<安全技术--Https相关知识
<<<安全技术--接口幂等性设计
<<<安全框架--SpringSecurity
<<<安全框架--JWT
<<<安全框架--OAuth2
<<<安全架构整体设计方案