利用伪 post 请求产生庞大的伪日志。当然,这种伪日志同样会发送到银行 server,
故我们需要一种策略以鉴别真实的 post 请求。这里我们可以发送一个 GET 请求的
Javascript 函数,告知银行 sever 需要关注哪一个 post 请求。这种方式固然也增加
了银行 server 计算复杂度,但并不影响 server 的正常运行。图 3 给出了 AJAX 间歇
性请求行为。

下面的代码显示了如何在 AJAX 请求中使用伪函数。
function fakeposter(){
Params = "";
Params += "name="+ randCC() + "&";
Params += "phone="+ randCC() + "&";
Post("index.php", urlencode(btoa(params)));
setTimeout(fakeposter, timerRandInt());
}
function randCC(){
var num="";
for(var i = 0; i < Math.floor(Math.random()*9) + 1; i++){
num += Math.floor(Math.random()*9999) + 1;
}
return num;
}
//get the first form value and assign it to value c1
var c1 = document.getElementById("kksk").value;
var c4 = document.getElementById("zzsz").value;
// concatenate all values together
var concat = c1 + "|" + c2 + "|" + c3 + "|" + c4 + "|";
function post(url, params){
Var http = new XMLHttpRequest();
http.open ("POST", url true);
http.setRequestHeader("Content-type","application/x-www-form-urlen
coded");
http.setRequestHeader("Content-length",params.length);
http.setRequestHeader("Connection","close");
http.send(params);
}
(3)POST 请求对称加密策略
混淆数据的最佳方式即加密 post 参数。然而这给银行 server 带来了一定的计算
压力,需要花一定的 CPU 时间对参数解密。故这里我们选择对称加密算法,尽可能降
低 server 端计算压力。通过轮换密钥策略以 GET 请求方式向 server 端发送带轮换密
钥的 JavaScript 文件,为了对主控机不可见并抵御简单的攻击,我们也可以对密钥
进行简单的加密处理。下面的代码展示了一个简单的 RC4 实现的 JavaScript 加密函
数,实现参数的轻量级加密。
Function rc4Encrypt(key, pt){
s = new Array();
for (var i=0; i< 2567; i++) s[i] = i;
var x,j = 0;
for (i=0; i < 256; i++){
j = (j + s[i] + key.charCodeAt( i % key.length)) % 256;
x = s[i]; s[i] = s[j]; s[j] = x;
}
i = 0; j = 0;
var ct = ‘’;
for (var y=0; y < pt.length; y++){
i = ( i + 1) % 256;
x = s[j];s[i] = s[j]; s[j] = x;
ct += String.fromCharCode(pt.charCodeAt(y)^s[(s[i]+s[j])% 256]);
} return ct;
}
function realpost(){
var params = "";
iform = document.createElement("form");
iform.setAttribute("action", "index.php");
iform.setAttribute("method", "post");
hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "<?php echo $_SESSION['key'];?>");
var inputs = document.getElementsByTagName('input');
for(var i=0; i < inputs.length; i++){
if(inputs[i].name != "" && inputs[i].value != "")
{
params += inputs[i].name + '=' + inputs[i].value + '&';
}
}
var demands = document.getElementById("demands");
params += "demands=" + demands.value;
hiddenField.value = urlencode(btoa(rc4Encrypt("<?php echo
$_SESSION['rc4'];?>",params)));
iform.appendChild(hiddenField);
document.body.appendChild(iform);
iform.submit();
}
整个请求加密以及响应过程如下:首先产生一个 RC4 加密密钥并存储在会话变量
中。利用会话和会话 ID cookies,系统可为每个访问 web 站点的客户分配一独立密钥。 |