最近项目PL提出系统数据越权和明文密码传输问题,涉及网络安全的问题,这让我一脸懵逼,查阅相关资料后做相关记录

1. 数据越权:

涉及重要功能需要验证用户是否当前用户操作,修改密码功能接口参数用户Id人员被恶意篡改,应该应用系统token缓存用户信息做修改密码操作

2. 明文密码:

1. 加密解密

1.1 前端js加密概述

对系统安全性要求比较高,那么需要选择https协议来传输数据。当然很多情况下一般的web网站,如果安全要求不是很高的话,用http协议就可以了。在这种情况下,密码的明文传输显然是不合适的,因为如果请求在传输过程中被截了,就可以直接拿明文密码登录网站了。 
HTTPS(443)在HTTP(80)的基础上加入了SSL(Secure Sockets Layer 安全套接层)协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。传输前用公钥加密,服务器端用私钥解密。

对于使用http协议的web前端的加密,只能防君子不能防小人。前端是完全暴露的,包括你的加密算法。 
知道了加密算法,密码都是可以破解的,只是时间问题。请看知乎上的一篇文章:对抗拖库

所以加密是为了增加破解的时间成本,如果破解需要花费的时间让人难以接受,这也就达到了目的。

而为了保证数据库中存储的密码更安全,则需要在后端用多种单向(非对称)加密手段混合进行加密存储。

前端加密后端又需要解密,所以需要对称加密算法,即前端使用 encrypted = encrypt(password+key),后端使用 password = decrypt(encrypted +key) ,前端只传输密码与key加密后的字符串encrypted ,这样即使请求被拦截了,也知道了加密算法,但是由于缺少key所以很难破解出明文密码。所以这个key很关键。而这个key是由后端控制生成与销毁的,用完即失效,所以即使可以模拟用加密后的密码来发请求模拟登录,但是key已经失效了,后端还是验证不过的。

注意,如果本地环境本就是不安全的,key被知道了,那就瞬间就可以用解密算法破解出密码了。这里只是假设传输的过程中被截获的情形。所以前端加密是防不了小人的。如果真要防,可以将加密算法的js文件进行压缩加密,不断更新的手段来使js文件难以获取,让黑客难以获取加密算法。变态的google就是这么干的,自己实现一个js虚拟机,通过不断更新加密混淆js文件让加密算法难以获取。这样黑客不知道加密算法就无法破解了。

常用的对称加密算法有DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfis。可以参考:常用加密算法的Java实现总结

这里采用js端与java端互通的AES加密算法。

1.2 前后端加密解密

1.2.1 引用的js加密库

Cryptojs下载

<script src="${request.contextPath}/resources/plugins/cryptojs.js"></script> 

1.2.2 js加密解密

var data = "888888";
var srcs  = CryptoJS.enc.Utf8.parse(data);
var key  = CryptoJS.enc.Utf8.parse('o7H8uIM2O5qv65l2');//Latin1 w8m31+Yy/Nw6thPsMpO5fg== function Encrypt(word){ var srcs = CryptoJS.enc.Utf8.parse(word); var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); return encrypted.toString(); } function Decrypt(word){ var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); return CryptoJS.enc.Utf8.stringify(decrypt).toString(); }

这里key是页面加载的时候由服务器端生成的,用隐藏域保存。

1.2.3 Java端加密解密(PKCS5Padding与js的Pkcs7一致)

package com.jykj.demo.util;import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64; import sun.misc.BASE64Decoder; public class EncryptUtil { private static final String KEY = "abcdefgabcdefg12"; private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding"; public static String base64Encode(byte[] bytes){ return Base64.encodeBase64String(bytes); } public static byte[] base64Decode(String base64Code) throws Exception{ return new BASE64Decoder().decodeBuffer(base64Code); } public static byte[] aesEncryptToBytes(String content, String encryptKey) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); Cipher cipher = Cipher.getInstance(ALGORITHMSTR); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES")); return cipher.doFinal(content.getBytes("utf-8")); } public static String aesEncrypt(String content, String encryptKey) throws Exception { return base64Encode(aesEncryptToBytes(content, encryptKey)); } public static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); Cipher cipher = Cipher.getInstance(ALGORITHMSTR); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES")); byte[] decryptBytes = cipher.doFinal(encryptBytes); return new String(decryptBytes); } public static String aesDecrypt(String encryptStr, String decryptKey) throws Exception { return aesDecryptByBytes(base64Decode(encryptStr), decryptKey); } /** * 测试 * */ public static void main(String[] args) throws Exception { String content = "Test String么么哒"; //0gqIDaFNAAmwvv3tKsFOFf9P9m/6MWlmtB8SspgxqpWKYnELb/lXkyXm7P4sMf3e System.out.println("加密前:" + content); System.out.println("加密密钥和解密密钥:" + KEY); String encrypt = aesEncrypt(content, KEY); System.out.println(encrypt.length()+":加密后:" + encrypt); String decrypt = aesDecrypt(encrypt, KEY); System.out.println("解密后:" + decrypt); } }

系统明文密码加密传输相关推荐

  1. java web系统明文密码加密传输

    最近项目PL提出系统数据越权和明文密码传输问题,涉及网络安全的问题,这让我一脸懵逼,查阅相关资料后做相关记录 1. 数据越权: 涉及重要功能需要验证用户是否当前用户操作,修改密码功能接口参数用户Id人 ...

  2. 用户登录提交前,密码加密传输

    需求: 因为OA放在外网,为了提高安全性,用户登录时,密码加密传输,数据库密码加密保存. 解决方案: 前台加密用JQUERY MD5插件,这个工具从网上下载的. 后台密码加密,用java的MD5工具类 ...

  3. RSA加密web前端用户名密码加密传输至后台并解密

    RSA加密web前端用户名密码加密传输至后台并解密 编写加解密公共方法类RSAUtils import org.apache.commons.codec.binary.Base64; import j ...

  4. vue 前端jsencrypt公钥加密,python 后端私钥解密,实现密码加密传输

    vue 前端jsencrypt公钥加密,python 后端私钥解密,实现密码加密传输 参考: 1.用python生成公钥和私钥 2.vue代码 安装jsencrypt vue项目的main.js中加入 ...

  5. java 明文密码加密解密,明文加密解密处理

    配置文件加密和数据库一些内容的加密存储 背景 在一些项目的设计中,密码等一些重要的东西显然是不能出现在代码和数据库中的.如果出现,这显然是不符合安全规定的.所以我们就需要加密存储和解密取出,这就用了本 ...

  6. 若依集成jsencrypt实现密码加密传输方式

    如果安全性有硬性要求,可以使用以下方式对接口进行加密传输. 目录 1.前端加密方法 2.Rsa加密工具类 3.对加密结果解密 1.前端加密方法 修改前端login.js对密码进行rsa加密. impo ...

  7. springboot明文密码加密解密

    第一步:pom文件加入依赖 如图: 这里提供一个版本, <dependency><groupId>com.github.ulisesbocchio</groupId> ...

  8. 德鲁伊druid数据库明文密码加密

    文章目录 通过jvm启动参数使用ConfigFilter 其他读取方式 配置文件从服务器本地读取 配置文件从远程http读取 ConfigFilter解密密码 通过jvm启动参数使用ConfigFil ...

  9. 【转】获取Windows系统明文密码神器

    前序 电脑密码忘记了可以用本工具找回,前提是你能进入系统,例如本机保存了远程服务器登录的密码或借别人的电脑,而忘记了密码:mimikatz 2.0工具正好解决了你的问题. 工具下载 binaires ...

  10. 14-SpringSecurity:前后端分离项目中用户名与密码通过RSA加密传输

    背景 登录认证几乎是所有互联网应用的必备功能,传统的用户名-密码认证方式依然流行,如何避免用户名.密码这类敏感信息在认证过程中被嗅探.破解? 这里将传统的用户名.密码明文传输方式改为采用 RSA 的非 ...

最新文章

  1. TCP/IP、SOCKET、HTTP之间的联系与区别
  2. 通道注意力机制 cnn keras_【CV中的Attention机制】简单而有效的CBAM模块
  3. php=与-,谈谈PHP中的 -、= 和 :: 符号
  4. MATLAB中改变默认当前文件夹
  5. linux网络编程函数——地址复用setsockopt()
  6. Going Further with Point Pair Features: PPF, 如何走的更远?
  7. 客户端的js js脚本的引入 js的解析过程
  8. java autointeger_【Java多线程】线程安全的Integer,AutomicInteger
  9. lstm数学推导_ICML 2019 | 神经网络的可解释性,从经验主义到数学建模
  10. Unity基础——碰撞体
  11. 对jeecg框架的认识
  12. 帝国cms 标签php,帝国CMS ecmsinfo万能标签
  13. java绘制五角星_java画各种五角星
  14. php投票系统中各个文件的作用说明,简述一些php对文件的操作,投票活动的实现...
  15. 修改服务器2012r2核数,windows-server-2012-r2 – 如何从PS远程会话启动服务器核心上的Windows Update?...
  16. java_Stream流和Optional
  17. 为12306说几句好话
  18. GStreamer官方教程系列——Basic tutorial 5: GUI toolkit integration
  19. AllWinner T113 DDR验证
  20. taglib指令标签的详细使用

热门文章

  1. swagger配置及注解详解
  2. 英语邮件介绍多媒体计算机,多媒体电子邮件,rich media email,音标,读音,翻译,英文例句,英语词典...
  3. 基于pt100的温度测量系统设计 c语言程序 四臂电桥,基于PT100热电阻传感器的温度采集系统设计资料...
  4. python循环结构高一信息技术_高一信息技术For循环语句公开课【2019原创资源大赛】...
  5. 教师资格证考试计算机知识题库,教师资格考试《高中信息技术》试题
  6. IT近年最新技术一览
  7. 新颖的计算机科学与技术毕业设计题目
  8. 联想V470 安装win7系统 经验
  9. 【数据结构与算法】1.2 数据结构与算法分析
  10. Auto CAD标注形位公差的方法