公司的系统应用后,客户那边用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#后台解码的更多相关文章

  1. js 转码 和 .Net 后台解码

    为防止 中文乱码,js传值要转码,当js 用 escape() 转码时,.Net 后台可以用 HttpUtility.UrlDecode() 进行解码. 例如:   document.cookie = ...

  2. JS base64 加密和 后台 base64解密(防止中文乱码)

    直接上代码 1,js(2个文件,网上找的)  不要觉的长,直接复制下来就OK //UnicodeAnsi.js文件 //把Unicode转成Ansi和把Ansi转换成Unicode function ...

  3. AES加密解密——AES在JavaWeb项目中前台JS加密,后台Java解密的使用

    一:前言 在软件开发中,经常要对数据进行传输,数据在传输的过程中可能被拦截,被监听,所以在传输数据的时候使用数据的原始内容进行传输的话,安全隐患是非常大的.因此就要对需要传输的数据进行在客户端进行加密 ...

  4. js前台加密,java后台解密实现

    参考资料: JS前台加密,java后台解密实现

  5. Base64 JAVA后台编码与JS前台解码(解决中文乱码问题)

    中文通过Java后台进行Base64编码后传到前台,通过JS进行Base64解码时会出现中文乱码的问题,被这个问题也是困扰了几天,使用jquery.base64.js只能转码非中文字符,经过搜集各种方 ...

  6. rsa实现js前台加密java后台解密

    前段时间写了一个rsa前台加密到后台用java解密,下面共享下实现思路: 准备工作:第三方包是必须的 bcprov-jdk15on-148.jar commons-codec-1.7.jar comm ...

  7. js前台编码,asp.net后台解码 防止前台传值到后台为乱码

    js编码:     encodeURI() 后台解码:HttpUtility.UrlDecode()

  8. js base64加密,后台解密

    这是为了解决页面发送post请求,传输密码,在页面的控制台可以看到密码的明文,所以先用base64把要传输的密码转换为非明文,然后在后台解密处理. base64encode.js // base64加 ...

  9. Js编码和Java后台解码

    1.java.将resultMsg 转为utf-8 (1) resultMsg = URLEncoder.encode(resultMsg, "utf-8"); (2) new S ...

随机推荐

  1. Java中如何克隆集合——ArrayList和HashSet深拷贝

    编程人员经常误用各个集合类提供的拷贝构造函数作为克隆List,Set,ArrayList,HashSet或者其他集合实现的方法.需要记住的是,Java集合的拷贝构造函数只提供浅拷贝而不是深拷贝,这意味 ...

  2. MYSQL命令行使用指南

    一.连接MYSQL. 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -u ...

  3. Javascript理解this对象

    this是函数运行时自动生成的一个内部对象,只能在函数内部使用,但总指向调用它的对象. 通过以下几个例子加深对this的理解. (1)作为函数调用 var name = 'Jenny'; functi ...

  4. Codeforces Round #373 (Div. 2) E. Sasha and Array

    题目链接 分析:矩阵快速幂+线段树 斐波那契数列的计算是矩阵快速幂的模板题,这个也没什么很多好解释的,学了矩阵快速幂应该就知道的东西= =这道题比较巧妙的在于需要用线段树来维护矩阵,达到快速查询区间斐 ...

  5. phpize建立php扩展 Cannot find config.m4

    centos  php  安装 memcache 扩展的时候   爆 Cannot find config.m4 错误 解决方案参考以下文章 参考文章 http://blog.csdn.net/wgl ...

  6. javascript温故知新

    1 javascript作用域 初学javascript的时候,变量的作用域就感觉有些麻烦,他不像C#或java那样清晰明了,貌似处处都在作用域内,但有时会处处都是空. javascript中,变量的 ...

  7. RHEL 6.5 PXE 安装调试 VMWARE ESXi 5.1 安装

    测试环境:win10/vmware workstation 12 pro 操作系统:RHEL 6.5(PXE服务器) [2016.11.30] [遗留问题] 1.ks.cfg通过本地文件方式加载不成功 ...

  8. bzoj 3211: 花神游历各国

    #include<cstdio> #include<cmath> #include<iostream> #define M 100006 using namespa ...

  9. 如何用python搞定验证码中的噪点

    背景:朋友在为"关山口男子职业技术学校"写一款校园应用,于是找MoonXue写一个学生选课系统的登录接口.为了搞定这个接口,不得不先搞定这个系统的验证码. 验证码大概是这个样子 看 ...

  10. 调整ESX的VMFS磁盘格式的块大小,让单个虚拟磁盘支持更大容量

    调整ESX的VMFS磁盘格式的块大小,让单个虚拟磁盘支持更大容量 前因:客户搭建了VMware ESX企业版的测试平台:有一天接到一个需求,是测试数据库的,需要一个300G的磁盘. 解决过程: 1.按 ...