登录验证以及安全问题: 
1、请求接口全部用post方式,在后端判断请求方式是否为post

2、登录密码等敏感信息要加密后传输,如用RSA(支付宝里可下载公私钥生成工具),客户端公钥加密,传到服务器后再用私钥解密:

//js公钥加密
function encrypt(data)
{//需要引入插件jsencrypt.js 下载地址http://download.csdn.net/detail/codercwm/9770398var RSA_PUBLIC_KEY = '';//私钥写在这里var obj = new JSEncrypt();obj.setPublicKey(RSA_PUBLIC_KEY);var data = obj.encrypt(data);return data;
}//php解密函数
function decrypt($data) {$data = base64_decode($data);//读取私钥$key_private = file_get_contents('./rsa_private_key.pem', 'r');//进行解密if(!openssl_private_decrypt($data, $data, openssl_pkey_get_private($key_private))) {return false;}return $data;
}

 

3、登录验证问题
(1)前后端代码放在同一个服务器,依旧可以使用session保存登录信息;
(2)在登录过程中,如果密码是明文提交,传输过程中可能会被拦截,即使加密后传输,也可用拦截到的已加密密码直接请求服务器进行登录,而且因为加密的代码是在客户端js中的,黑客可以修改客户端js,用拦截到的已加密的密码绕开此加密代码请求服务器进行登录,这是非常危险的,所以我想出了如下方案:

请求登录页面时,服务器生成一个临时token存储在服务器(session)并返回给客户端,用户提交登录时把密码和临时token拼接后通过RSA加密传回到服务器(拼接后再加密的原因是为了防止别人拦截到单单是密码加密的字符串,
因为如果拿到了单单是密码加密的字符串,即如上面所说的,无论如何也可以进行假冒登录的),传到服务器解密后把密码和token取出,判断token是否正确,若正确即进行密码判断等一系列登录操作,登录成功后销毁这个临时token。
这样即使在用户提交数据的过程中数据被拦截,拦截到的数据也是密码和临时token拼接后加密的数据,即使黑客用此数据直接对服务器进行请求,因为用户登录成功后临时token已被销毁,所以黑客并不能登录成功。

4、关于拦截和伪造cookie进行登录的预防:
(1)用户登录后,由于是用cookie记录sessid,如过请求过程中cookie被拦截,黑客就可以利用此cookie中的sessid在另一台电脑上进行登录,直至用户退出登录服务器session被销毁,这样是非常危险的,所以我想出了如下方案:

登录后生成一个临时token储存到服务器并传回到客户端,客户端下次请求时把此token传到服务器,判断与服务器中储存的token是否一样,如不一样即为未登录,如一样即销毁此token并生成新的token返回到客户端让客户端在下一次请求的时候再传回进行判断,
如此重复。 这种方法也有一个漏洞,如果用户在一次请求后,还未进行下一次请求就已被黑客拦截到登录信息并进行假冒登录,他一样可以登录成功并使用户强制下线,但这种方法已大大减少被假冒登录的机会。

5、结合4、5两种方案,我的做法如下:

用户请求登录页面的时候,服务器生成一个token保存在服务器session中和客户端cookie中,登录时客户端带上此token一起提交到服务器,验证此token是否有效,若有效即登录成功并更新此token,重新赋值到session和cookie中;
登录后的用户在每一次请求时都判断cookie中的token和session中的token是否一样,若一样即登录有效,并且要更新token,下次请求再进行判断,若不一样即登录无效。

  

转载于:https://www.cnblogs.com/super-ldc/p/10855298.html

WEB前后端分离开发中的验证与安全问题相关推荐

  1. 前后端分离项目token怎么验证_微信端前后端分离开发中token验证和数据的获取...

    微信端前后分离开发中,授权认证,获取token和openid是必不可少的一步. 我们的思路是,每次调用接口前,判断cookie里面是否有token和openid,没有的话判断url参数中是否存在,没有 ...

  2. 使用 imitator 实现前后端分离开发中的数据模拟与静态资源映射

    imitator 一个简单易用的 nodejs 服务器, 主要用于模拟 HTTP 接口数据, 请求代理与转发 . 使用imitator,可以解决前后端分离开发中的痛点之一:数据模拟,也可以作为代理服务 ...

  3. web前后端分离开发部署模式

    web前后端分离开发部署模式 在开始讨论这个话题之前我们先来认识一下传统的开发模式. 一.传统开发模式 相信很多做过Web开发童鞋应该都会经历这样一种开发模式,利用后端语言提供的模版引擎编写HTML/ ...

  4. SpringCloud微服务前后端分离开发中出现的弱智问题之(不支持当前请求方法)

    SpringCloud微服务前后端分离开发中出现的弱智问题之(不支持当前请求方法) 问题背景 问题解决 为什么说这是一个弱智问题,因为这多是编写代码不仔细造成的. 问题背景 当当后台API发布的接口与 ...

  5. php 跨域 验证_php 前后端分离开发进行跨域请求时ajax发送验证参数token的header头解决方法...

    php前后端分离开发中要实现前后端参数信息交互,必须解决token标识验证问题. 步骤如下: 1.前端ajax发送请求时,要设置一个自定义header头.代码如下: $.ajax({ url:&quo ...

  6. SpringBoot + Vue前后端分离开发:全局异常处理及统一结果封装

    SpringBoot + Vue前后端分离开发:全局异常处理及统一结果封装 文章目录 SpringBoot + Vue前后端分离开发:全局异常处理及统一结果封装 前后端分离开发中的异常处理 统一结果封 ...

  7. 视频教程-Vue、Spring Boot开发小而完整的Web前后端分离项目实战-Java

    Vue.Spring Boot开发小而完整的Web前后端分离项目实战 3年多.net开发经验:5年的java后端开发经验,熟悉行.net,java流行技术,拥有多个.net,java web企业级应; ...

  8. 前后端分离开发模式下后端质量的保证 —— 单元测试

    概述 在今天, 前后端分离已经是首选的一个开发模式.这对于后端团队来说其实是一个好消息,减轻任务并且更专注.在测试方面,就更加依赖于单元测试对于API以及后端业务逻辑的较验.当然单元测试并非在前后端分 ...

  9. ultraedit 运行的是试用模式_单元测试 —— 前后端分离开发模式下后端质量的保证...

    概述 在今天, 前后端分离已经是首选的一个开发模式.这对于后端团队来说其实是一个好消息,减轻任务并且更专注.在测试方面,就更加依赖于单元测试对于API以及后端业务逻辑的较验.当然单元测试并非在前后端分 ...

最新文章

  1. ansible 安装和使用
  2. angluar bulid 的时候报错
  3. 【双100%解法】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
  4. 训练日志 2019.1.31
  5. linux急救模式_抢救Linux:我如何将组织介绍给Linux
  6. 不懂分布式锁的这些问题,就亏大了
  7. Unreal Engine 4 —— 适用于FPS游戏的勾边后期效果
  8. Convert Sorted List to Balanced Binary Search Tree leetcode
  9. 设计模式之——建造者模式
  10. 【CometOJ】CometOJ#8 解题报告
  11. 【BZOJ】3289: Mato的文件管理(莫队算法+树状数组)
  12. Ubuntu20.04配置mysql环境及远程连接
  13. 使用tkinter爬取二手房交易网站信息
  14. C语言编程题:阶乘计算
  15. 数字图像处理与应用——图像滤波技术
  16. 经典网页设计:10个优秀的国外企业网站设计案例
  17. 笔记本触摸板手势使用
  18. min-max之间取随机数公式
  19. python统计元音字母个数_Quzh[python]统计元音字母——输入一个字符串,统计处其中元音字母的数量。...
  20. python3网络爬虫开发实战6.3爬取微博处理since_id

热门文章

  1. mail、mailx、sendmail的区别
  2. Windows下Tomcat服务器的安装和配置
  3. linux系统启动过程(二)
  4. java 定义类变量初始化吗_Java的变量有哪些类型?变量如何定义?如何初始化?请说明理由并举例_学小易找答案...
  5. 倒置 mysql_SQL Server中的行列倒置技巧
  6. [译] Android 上一次编写,随处测试
  7. React.js 小书 Lesson5 - React.js 基本环境安装
  8. WebSocket在容器化管理平台的应用
  9. phonegap工程中修改app的名字
  10. 【Alpha】开发日志Day4-0715