JS前台base32加密,C#后台解码
公司的系统应用后,客户那边用appscan工具检测到严重的漏洞
1.使用 SQL 注入的认证旁路 (1/2)--未对用户输入正确执行危险字符清理
2.已解密的登录请求 (2/2)----诸如用户名、密码和信用卡号之类的敏感输入字段未经加密即进行了传递
解决思路:
1. 因为密码设置时只允许输入字母和数字,所以在用户登录前用JS检查输入的内容是否符合只包含字母和数字,这样就防止了SQL的注入。
2. 被检测出来的原因是密码在后台以明文接收,容易被人获取。于是想如果在登录前用JS把它进行加密,然后再在后台解密出来,是否可解决此问题呢。
于是在网上查询到下面JS前台base32加密,C#后台解码的方法。
JS 加密方法:
var getEncodeString = function(srcString) {
//var srcString = 'abc';
var BASE32CHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
var i = 0;
var index = 0;
var digit = 0;
var currByte;
var nextByte;
var retrunString = ''; for (var i = 0; i < srcString.length; ) {
//var index = 0;
currByte = (srcString.charCodeAt(i) >= 0) ? srcString.charCodeAt(i)
: (srcString.charCodeAt(i) + 256); if (index > 3) {
if ((i + 1) < srcString.length) {
nextByte = (srcString.charCodeAt(i + 1) >= 0)
? srcString.charCodeAt(i + 1)
: (srcString.charCodeAt(i + 1) + 256);
} else {
nextByte = 0;
} digit = currByte & (0xFF >> index);
index = (index + 5) % 8;
digit <<= index;
digit |= (nextByte >> (8 - index));
i++;
} else {
digit = (currByte >> (8 - (index + 5))) & 0x1F;
index = (index + 5) % 8; if (index == 0) {
i++;
}
} retrunString = retrunString + BASE32CHAR.charAt(digit);
}
return retrunString.toLowerCase();
}
JS调用代码:
// 判断输入是否是一个由 0-9 / A-Z / a-z 组成的字符串
function isalphanumber(str)
{
var result=str.match(/^[a-zA-Z0-9]+$/);
if(result==null)
{
return false;
}
else
{
return true;
}
} //base32加密
function CheckAndEncode() {
var pwd = document.getElementById('txtPwd');
if (!isalphanumber(pwd.value)) {
alert("密码只能输入字母和数字!");
pwd.value = "";
pwd.focus();
return false;
}
var s1 = pwd.value;
var s2 = escape(s1);
pwd.value = getEncodeString(s2);
}
后台转码代码:
/// <summary>
/// BASE32解码
/// </summary>
/// <param name="encodeString"></param>
/// <returns></returns>
private string getDecodeString(string encodeString)
{
int i;
int index;
int lookup;
int offset;
int digit;
string en_string = encodeString.ToUpper();
int[] BASE32LOOOKUP = new int[]{
0xFF, 0xFF, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, // '0', '1', '2', '3', '4', '5', '6', '7'
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // '8', '9', ':', ';', '<', '=', '>', '?'
0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G'
0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, // 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O'
0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, // 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W'
0x17, 0x18, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 'X', 'Y', 'Z', '[', '\', ']', '^', '_'
0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g'
0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, // 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o'
0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, // 'p', 'q', 'r', 's', 't', 'u', 'v', 'w'
0x17, 0x18, 0x19, 0xFF, 0xFF, 0xFF, 0xFF,0xFF
};
int stringLen = ((en_string.Length * ) / );
int[] bytes = new int[stringLen];
for (var a = ; a < stringLen; a++)
{
bytes[a] = ;
} for (i = , index = , offset = ; i < en_string.Length; i++)
{
var charCode0 = (short)'';
lookup = (short)en_string[i] - charCode0; if ((lookup < ) || (lookup >= BASE32LOOOKUP.Length))
{
continue;
} digit = BASE32LOOOKUP[lookup]; if (digit == 0xFF)
{
continue;
} if (index <= )
{
index = (index + ) % ; if (index == )
{
bytes[offset] = bytes[offset] | digit; offset++; if (offset >= bytes.Length)
{
break;
}
}
else
{
bytes[offset] = bytes[offset] | (digit << ( - index)); }
}
else
{
index = (index + ) % ;
bytes[offset] = bytes[offset] | (digit >> index); offset++; if (offset >= bytes.Length)
{
break;
} bytes[offset] = bytes[offset] | (digit << ( - index));
if (bytes[offset] >= )
{
bytes[offset] %= ;
}
}
}
string realkeyString = "";
for (var a = ; a < bytes.Length; a++)
{ var realkey = (char)bytes[a];
realkeyString += realkey;
}
return realkeyString;
}
后台调用转码获取明文:
string pwd="";
pwd=getDecodeString(txtPwd.Text.Trim());
可是等我做完以上改动之后,再用ibm appscan检测,漏洞依然没减少,郁闷啊 。。。我的一天
本文主要内容转载自 http://wwwluo.blog.163.com/blog/static/6129023120110710427826/
JS前台base32加密,C#后台解码的更多相关文章
- js 转码 和 .Net 后台解码
为防止 中文乱码,js传值要转码,当js 用 escape() 转码时,.Net 后台可以用 HttpUtility.UrlDecode() 进行解码. 例如: document.cookie = ...
- JS base64 加密和 后台 base64解密(防止中文乱码)
直接上代码 1,js(2个文件,网上找的) 不要觉的长,直接复制下来就OK //UnicodeAnsi.js文件 //把Unicode转成Ansi和把Ansi转换成Unicode function ...
- AES加密解密——AES在JavaWeb项目中前台JS加密,后台Java解密的使用
一:前言 在软件开发中,经常要对数据进行传输,数据在传输的过程中可能被拦截,被监听,所以在传输数据的时候使用数据的原始内容进行传输的话,安全隐患是非常大的.因此就要对需要传输的数据进行在客户端进行加密 ...
- js前台加密,java后台解密实现
参考资料: JS前台加密,java后台解密实现
- Base64 JAVA后台编码与JS前台解码(解决中文乱码问题)
中文通过Java后台进行Base64编码后传到前台,通过JS进行Base64解码时会出现中文乱码的问题,被这个问题也是困扰了几天,使用jquery.base64.js只能转码非中文字符,经过搜集各种方 ...
- rsa实现js前台加密java后台解密
前段时间写了一个rsa前台加密到后台用java解密,下面共享下实现思路: 准备工作:第三方包是必须的 bcprov-jdk15on-148.jar commons-codec-1.7.jar comm ...
- js前台编码,asp.net后台解码 防止前台传值到后台为乱码
js编码: encodeURI() 后台解码:HttpUtility.UrlDecode()
- js base64加密,后台解密
这是为了解决页面发送post请求,传输密码,在页面的控制台可以看到密码的明文,所以先用base64把要传输的密码转换为非明文,然后在后台解密处理. base64encode.js // base64加 ...
- Js编码和Java后台解码
1.java.将resultMsg 转为utf-8 (1) resultMsg = URLEncoder.encode(resultMsg, "utf-8"); (2) new S ...
随机推荐
- 纯CSS tooltip 提示
一般的tooltip,使用超链接的title,或者是css+javascript生成. 如果页面布局合理,样式结构清晰,可以使用纯CSS的提示. demo如下: a.tooltip { positio ...
- hihocoder挑战赛26
某蒟蒻成功的·写出了T1并rank16...小岛的题目真难... 传送门:http://hihocoder.com/contest/challenge26 T1 如果你想要暴力枚举的话显然是不行的 如 ...
- java 中Session 持久化问题
首先: 今天发现了个session 持久化的问题 在Tomcat 停止运行后再启动 session 中保存的东西还会存在 ,百度了一下 原理 1.Session Create 时 2.Sessio ...
- java selenium (二) 环境搭建方法一
webdriver 就是selenium 2. webdriver 是一款优秀的,开源的,自动化测试框架. 支持很多语言. 本文描述的是用java Eclipse 如何搭建环境 阅读目录 ...
- Windows Phone 10如何借Windows 10的东风
距微软发布Windows Phone 7已经四年多了,WinPhone的市场份额一直萎糜不前.去年微软收购诺基亚,如特洛伊木马般戏剧,却没有挽救WinPhone,甚至出现下滑,已经不足3%,已经基本被 ...
- oracle常用系统表
转自:http://blog.chinaunix.net/uid-200142-id-3479306.html dba_开头..... dba_users 数据库用户信息 dba_segme ...
- C# 扩展类
C# 中提供一个非常实用的供能,扩展方法(Extension method) 扩展方法是通过额外的静态方法扩展现有的类型.通过扩展方法,可以对已有类型做自己想做的相关扩展.方法:定义静态类,扩展方法也 ...
- iOS UIView上添加mp4视频
ViewController.h文件中添加如下代码: #import <MediaPlayer/MediaPlayer.h> @property(nonatomic,retain) MPM ...
- k8s pv
这个文档描述当前在k8s中PersistentVolumes的使用. 我们建议和volume一起进行了解 Introduction 管理存储和管理计算是截然不同的问题. 持久存储子系统对用 ...
- 面试复习(C++)之快速排序
#include <iostream> using namespace std; void Quicksort(int *a,int low,int high) { if(low>h ...