
关键信息明文传输也是一个十分常见的漏洞。在前后端进行交互时,尤其是登录操作,需要注意对密码等关键信息进行加密,因为信息在传输过程中,可能会有被截获的危险。下面就针对扫描工具,给出几种方案。
修复方案 //前端进行加密编码
var b = new Base64();
var password_encode = b.encode(trim(password.value));
document.getElementById("password").value=password_encode;
//后端进行解密编码 password = PasswordUtils.getFromBase64(password);
//解码具体方法
public static String getFromBase64(String str)
{
byte[] b = null;
String result = null;
if (str != null)
{
BASE64Decoder decoder = new BASE64Decoder();
try
{
b = decoder.decodeBuffer(str);
result = new String(b, "UTF-8");
}
catch (Exception e)
{
e.printStackTrace();
}
}
return result;
}
//前端加密,秘钥长度需为16位,这里我使用当前系统时间+abc构成的16位字符串做秘钥,并将秘钥存入Session中
<%
String key = Long.toString(new Date().getTime()) + "abc";
session.removeAttribute("AESKey");
session.setAttribute("AESKey", key);
%>
var password = document.getElementById("password").value;
var aeskey = CryptoJS.enc.Utf8.parse("<%= key%>");
var srcs = CryptoJS.enc.Utf8.parse(password);
var encrypted = CryptoJS.AES.encrypt(srcs, aeskey, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
document.getElementById("password").value = encrypted.toString();
//后端解密 password = PasswordUtils.decryptAES(request, password);
public static String decryptAES(HttpServletRequest req, String data) throws Exception {
try {
HttpSession session = req.getSession();
String key = StringUtil.ob2string(session.getAttribute("AESKey"));
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(data);
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
cipher.init(Cipher.DECRYPT_MODE, keyspec);
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original);
return originalString;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
另外补一个注意事项,对于AES三中数据填充方式:
PKCS7Padding
Java不支持此方式
PKCS7Padding是缺几个字节就补几个字节的0
PKCS5Padding
JS不支持此方式
PKCS5Padding是缺几个字节就补充几个字节的几,例如缺8个字节,就补充8个字节的8
NOPadding
不补充字节
有些时候,不仅仅是密码,很多其它的信息也会被漏洞扫描工具认为是“敏感信息”,在这种情况下一一对这些数据加密显然是不现实的,因此,最好的办法就是关闭http协议通信而采用https通信,保证信道的安全,从而保证关键信息的安全。