关于账号登录接口安全方面的简单见解

前言:

最近工作项目都比较忙,难得稍微有点时间,我来分享一下最近解决的一个账号登录方面的安全问题。

概述:

说到账号登录接口方面的安全问题,大概是分为以下几种:

  1. SQL注入
  2. 暴力爆破
  3. 伪造响应服务器

我们开发目前防止这些情况出现,最常见的方案就是明文加密,各种各样的验证码、手机短信验证、特殊字符戳过滤、ip白名单、ip黑名单,密文传输等等

问题介绍:

这个项目是一个表单报名项目,前后端分离,前端用的是VUE,后端用的是TP5,流程是用户进行填写会议的密码和验证码,然后如果验证成功就会进入到表单报名的页面。而这次安全问题是出现在密码验证这部分。

问题验证过程如下:
第一步:创建会议,密码1234,选择会议报名,输入密码1,抓包,如下:
关于账号登录接口安全方面的简单见解_第1张图片
第二步:拦截返回包,将code的值从1改为0,如下:

关于账号登录接口安全方面的简单见解_第2张图片
关于账号登录接口安全方面的简单见解_第3张图片
第三步:返回浏览器,可进行报名。

问题分析:

从安全检查人员演示的过程中,我们能知道主要用的是抓包技巧,利用的是前端验证密码是否正确是通过后端接口返回的code,从而只要抓包修改code就能直接绕过密码验证,就能进入到后面的页面。

那么,我们分析这过程,其实主要出现在抓包可以让前端误以为后端传给了密码验证正确。 中途被修改了结果,却傻傻分不清。那么我们处理这个问题也很容易,我们尽量让这结果不被修改就好了。我们只需要加一个多一个签名参数,作为标志给前后端识别是否是真信息。

但是,值得注意的是,前端的代码往往很容易泄露,就算是加密过的,也可能被反编译,因此,我们考虑的签名生成算法应该满足以下几点要求:

  1. 不可逆性;就算是被安全人员抓包拦截得到签名,也不应该可以反推出来密码。
  2. 随机性;同一个会议密码,每次的签名必须是变化的,不能被抓包获取后,每次都使用同一个。
  3. 保密性;就算是代码泄露,知道算法,也不能直接生成正确的签名。

于是,我根据这项目,我想到的算法是时间戳+会议密码+md5

$sign = md5($password+$timestamp+'xxx');

其中的时间戳是前端进行传参的,这样能确保前后端用同一个时间戳,当然也可以后端生成后返回给自己的时间戳给前端。

总结:

安全检测中的抓包修改,其实算是比较暴力的方法,也是往往网页开发初学者容易忽略的一个安全问题。所以,我们接口尽量都想的比较周全,对重要的一些接口也应该生成签名,防着抓包绕过进行系统破坏。

你可能感兴趣的:(PHP)