公司的系统应用后,客户那边用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. pyhon——进程线程、与协程基础概述

    一直以来写博客都是实用主义者,只写用法,没信心写原理,但是每一次写作业的过程都有一种掘地三尺的感觉,终于,写博客困难症重症患者经历了漫长的思想斗争,还是决定把从网上淘到的各种杂货和自己的总结放在一起, ...

  2. Java开发常用的在线工具

    原文出处: hollischuang(@Hollis_Chuang) 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工具是我们在日常开发及学习过程中 ...

  3. python的string用法

    s.strip().lstrip().rstrip(',') S.lower() #小写 S.upper() #大写 S.swapcase() #大小写互换 S.capitalize() #首字母大写 ...

  4. less中的减号处理

    很奇怪,less中对减号似乎没有特别说明,很容易让人无用. @div1Width:500; @div2Width:200px; .div3cls { width:@div1Width-@div2Wid ...

  5. std::map用法

    STL是标准C++系统的一组模板类,使用STL模板类最大的好处就是在各种C++编译器上都通用.    在STL模板类中,用于线性数据存储管理的类主要有vector, list, map 等等.本文主要 ...

  6. MVC5 + EF6 完整入门教程三:EF来了

    期待已久的EF终于来了 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型,将之前的示例添加数据库查询验证功能. 文章提纲 概述 & ...

  7. HTML标签-【fieldset】-fieldset

    <fieldset style="width: 400px; height: auto; margin: 10px auto"> <legend>用户基本信 ...

  8. ASP.NET MVC为字段设置多语言显示 [转]

    这段时间一直在忙.NET的项目,今天就写一下关于.NET的文章吧,也很长时间没写过.NET的啦  在使用ASP.NET MVC3 的时候,使用元数据模式可以非常方便地设置每个 字段(或者说属性)以减少 ...

  9. linux 命令行启动虚拟机

    vmrun -T ws start /root/vmware/Windows\ Server\ 2012/Windows\ Server\ 2012.vmx nogui

  10. Lyft押重注于苹果编程语言Swift

    Lyft押重注于苹果编程语言Swift 1年后获得丰厚回报BI中文站 8月22日报道 一年多以前,打车应用Lyft做出重大决定,决心押重注于苹果开发的编程语言Swift,用这种编程语言重写其所有iPh ...