最近项目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 srcs = CryptoJS.enc.Utf8.parse(‘666666’);

var key = CryptoJS.enc.Utf8.parse('o7H8uIM2O5qv65l2');//秘钥

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 = "o7H8uIM2O5qv65l2";

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);

}}

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

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

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

  2. web登录用户名密码加密

    阿里云低价服务器1折特惠,优惠爽翻天,点我立即低价购买 之前一直没关注过web应用登录密码加密的问题,这两天用appscan扫描应用,最严重的问题就是这个了,提示我明文发送密码.这个的确很不安全,以前 ...

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

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

  4. Java版 凯撒密码 加密、解密、暴力破解

    Java版 凯撒密码 加密.解密.暴力破解 用Java实现凯撒密码的 '加密' 和 '解密' 工作 代码实现如下: 代码片 package com.hellow.demo;import java.ut ...

  5. Java web系统打包成exe安装文件

    Java web系统打包成exe安装文件 一.    工具准备 1.        NSIS打包工具: http://nsis.sourceforge.net下载并安装: 2.        NSIS ...

  6. 我的第一个web开发环境:基于eclipse java EE 的java web系统搭建

    一种基于eclipse java EE 的java web系统搭建 刚开始接触web开发,首先将开发环境的搭建记下来以免忘记. 1.环境搭建前需要准备的工具 (1)Eclipse IDE for Ja ...

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

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

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

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

  9. RSA加密:Web前端登录账户密码加密传输

    一般在做系统时候对安全性要求比较高,现在通常选择https协议来进行数据传输.很多情况下一般的javaweb网站,如果安全要求不是很高的话,用https协议就可以了.在这种情况下,密码的明文传输显然是 ...

最新文章

  1. chatbot:基于 AIML 的 PHP 聊天机器人
  2. Python开发植物大战僵尸游戏(附github项目地址)
  3. “文艺复兴” ConvNet卷土重来,压过Transformer FAIR重新设计纯卷积新架构
  4. swt 键盘事件ctrl+c_跑Python的键盘可以很强大
  5. java通用对象_有效的Java –所有对象通用的方法
  6. MDI多窗体1130
  7. FPGA核心板内部各类型资源总结(xilinx)
  8. easyui添加删除表格任意行(2)
  9. Eclipse 反编译插件下载地址
  10. 矩阵特征值的数值解法
  11. 大学生集体恶搞学士服猥琐拍照,谁羞辱了谁?!(图)
  12. 使用 Python 进行面部识别
  13. ffmpeg实现视频实时动态时间水印
  14. MyBatis读数据库出现很多字段都是null的问题
  15. Golang处理excel用流式写入,追加行数据
  16. [MicroPython]STM32F407开发板DIY声光控开关
  17. python本地安装pip命令的终极教程
  18. 大型智慧校园系统源码 智慧校园源码 Android电子班牌源码
  19. 基于SSH的便利店、超市管理系统
  20. 过滤软件“绿坝”分析报告

热门文章

  1. 如何使用VS2015编译运行DX11版本龙书配套源码
  2. 借助 Material Design,帮助您打造更好的无障碍应用 (中篇)
  3. 【原创】基站定位小测
  4. 5.7.24mysql 配置安卓,安卓按键精灵连接MySQL全面解析Windows下安装 mysql5.7的方法
  5. css3画各种三角形(transparent)
  6. 城市间紧急救援 (25 分)
  7. 电信感知测试软件,智能算法在电信业务用户体验感知分析中的应用
  8. [简历] PHP 技能关键字列表
  9. Android开发笔记(序)写在前面的目录大全
  10. matlab参数化翼型,机翼翼型Matlab编程.doc