Reader's Digest

Digest your Internet

Archive for May, 2008

在Web页面中执行Windows程序

现在许多公司都面临一个难题:如何在Web环境中执行存在的Windows应用程序。这里就介绍实现这个功能的技术,它争取对代 码做最小的改变,完成在Windows环境中应做的一切。 现存的Windows应用程序   这里想要在Web中执行的Windows例子程序是非常简单的,它是用VB编写的,其中有一个表单。运行时,在表单上显示雇员的信 息,这些信息来源于Access数据库的一个表。表单上设有First、Next、Previous 和 Last按钮,从而允许用户浏览记录。同时, 还可以通过按钮Add、Delete 和 Update来改变数据。 这个程序通过一个COM类来与数据库通信,它有下面的方法: AddEmployee() 在表中添加一个记录,保存新雇员的信息 UpdateEmployee() 更新一个记录 DeleteEmployee() 删除一个记录 GetEmployees() 获取一个雇员的信息 程序正常运行时,浏览器显示如下: 开发Web应用程序   在传统的web应用程序中,大多数的处理都是在服务器端完成的。这里,我们将尝试在客户端做一些处理,以减少服务器上的工 作量。也就是,让客户端完成显示信息的处理工作,并将商业规则和数据库存取留给服务器端。这就象一个n层处理模型。   当用户需要访问另一个不同的数据时,我们也不想从服务器上再调入整个web页面,因此,需要找到一个web客户端在后台与 web服务器交流信息的方法。这个例子中,我们使用了微软公司的XMLHTTP COM对象组件,它是随Internet Explorer 5.0而来 的。当然,也可以编写一个功能类似的Java applet来克服这个局限。 服务器端的代码   让我们从研究VB应用程序的COM类到Web的每一个方法开始,这可以通过编写ASP页面来调用COM类中的每个方法实现 (AddEmployee.asp, UpdateEmployee.asp, DeleteEmployee.asp, GetEmployee.asp)。 明白了这些,就能够在Web中存取COM 类方法了。   ASP页面应该能够接受与COM类一样的参数,这些页面向原始的COM类发送调用。这里主要的区别就是所有的输出是以XML格式 的。我们使用另外一个叫XMLConverter的COM类,转换方法的输出为XML格式。XMLConverter的代码包含在下载文件中,它有一个 函数,能够接受一个ADO记录集做为参数,并且转换为一个XML文档。实现这个目的的函数例子可以从Internet上很容易地找到,比 如: http://www.vbxml.com/xml/guides/developers/ado_persist_xml.asp   我们也许曾经使用过ADO记录集的Save函数,加上adPersistXML,来实现按照xml格式保存,但是在这里,为了简单起见,我 们仍使用编制的函数。 下面的代码来自GetEmployees.asp,它执行GetEmployees方法,从而可以让你清晰地看到这种技术: <SCRIPT LANGUAGE=vbscript RUNAT=Server> ‘Declare the above described XMLConverter Dim […]

Read the rest of this entry »

透过 ASP 修改 NT 使用者密码

当一个使用者登入你网站的安全区域, 你就可以利用 ServerVariables 集合中的 LOGIN_USER 来了解登入的使用者帐号, 当然记得要把允许匿名登入选项关闭, 现在就先来看 HTML 部分 <form action=”changepwd.asp” method=”post”> <!– 为了不让使用者自己输入帐号所以使用隐藏 –> <input type=”hidden” name=”UserName” value=”<%=Request.ServerVariables(“LOGIN_USER”)%>”> <br>输入旧密码 : <input name=”OldPwd”> <br>输入新密码 : <input name=”NewPwd1″> <br>确认新密码 : <input name=”NewPwd2″> <input type=”submit” value=” 变更密码 “> </form> 程序代码 接下来是 ASP 的部分, 看看如何透过 ADSI 来修改 WIndows 2000 使用者帐号, 将下底的程序代码存成 changepwd.asp 檔名 <% OldPwd = Request.Form(“OldPwd”) […]

Read the rest of this entry »

COOKIE欺骗原理

现在有很多社区网为了方便网友浏览,都使用了cookie技术以避免多次输入密码(就如the9和vr),所以只要对服务器递交给用户的cookie进行改写就可以达到欺骗服务程序的目的。 COOKIE欺骗原理 按照浏览器的约定,只有来自同一域名的cookie才可以读写,而cookie只是浏览器的,对通讯协议无影响,所以要进行cookie欺骗可以有多种途径: 1、跳过浏览器,直接对通讯数据改写 2、修改浏览器,让浏览器从本地可以读写任意域名cookie 3、使用签名脚本,让浏览器从本地可以读写任意域名cookie(有安全问题) 4、欺骗浏览器,让浏览器获得假的域名 其中: 方法1、2需要较专业的编程知识,对普通用户不太合适。 方法3的实现有2种方法: 1、直接使用签名脚本,不需要签名验证,但是产生很严重的安全问题,因为大家都要上网的,如果这样做你的硬盘文件就…… 2、对脚本进行签名后再使用签名脚本,但是需要专用的数字签名工具,对普通用户也不合适。 方法4看样子应该是最合适的了,域名欺骗很简单,也不需要什么工具(当然如果你的机器装有web服务器那更好了),下面我以the9为例,以这种方法为基础,阐述一下cookie欺骗的过程(下文中提到的任何服务端的bug,the9都已经做了改进,所以本文对the9无安全方面的影响): 注:我们讨论的cookie是那种不会在硬盘的cookie文件里留下踪迹的cookie,就是那种只在浏览器生存周期内(会话)产生的cookie,如果浏览器关闭(会话结束)那么这个cookie就被删了!  COOKIE欺骗实战 the9在登陆的时候会返回3个cookie(这可把浏览器的警告cookie选项打开时看到): cgl_random(随即序列号):登陆识别的记号 cgl_loginname(登陆名):身份的识别记号 cgl_areaid(小区号):你居住的小区号码 只要把cgl_loginname填入正确的登陆名,再对cgl_random进行修改,就可以达到欺骗服务程序的目的。 一般欺骗php程序的字符串为: 1´´or´´1´´=´´1 把这个填入cgl_random,服务程序就被欺骗了! 因为服务程序不太可能对cookie进行语法检查(the9现在改进了),那么把这个字符串填入,就可以成功的欺骗对方程序,而达到突破的目的了! 现在的问题是,如何使浏览器把这个我改过的cookie返回给the9? 看一看the9的域名吧:http://www.the9.com/,而浏览器的cookie警告已经告诉了我们这3个cookie会返回给有.the9.com这个域名的服务器,哎?我的机器上正好有web服务器,那么动手吧! 先编一个设置cookie的html,就叫cookie.htm吧,然后把这个cookie放进web目录,这样还不行,因为我的机器的域名没设,那么设置host的名字,可是如果在网络设置中进行设置的话,机器要重启动的,还是想想别的简单的办法吧! 然后我们应该编辑hosts文件,这个文件应该在windows目录下,你有可能找不到它,但是如果你找到了hosts.sam文件,那么把它后面的扩展名去掉,就是我们要的文件了! 编辑hosts文件,填入以下一行: 127.0.0.1 www0.the9.com 解释一下,127.0.0.1是本机的lo地址,可以用做web地址,而www0.the9.com就是我们欺骗产生的域名。 然后在浏览器中输入http://www0.the9.com/cookie.htm,看,页面出来了,快设置cookie吧! 直接访问http;//www.the9.com/main.htm看看,不错吧! 但是不是所有的网友都有自己的web服务器啊!那怎么办呢? 其实如果你有个人主页的话,也可以达到cookie欺骗的目的,比如某个个人主页的服务器的ip地址是1.2.3.4,先上传cookie.htm文件,再编辑hosts文件: 1.2.3.4 www0.the9.com 然后访问http://www0.the9.com/***/cookie.htm,其中***是你个人主页的地址目录。 对了我作了个工具在我的主页上,现在公开一下,http://home.etang.com/fsl/9the/,大家知道该怎么做了吧?嘿嘿,不过你那样设置是没有用的,要这样编辑hosts: etang的ip www.the9.com the9的ip www0.the9.com 为什么要这样呢?我等会会告诉大家的 继续the9的cookie讨论,还有2个cookie: cgl_mainshowinfo(个人信息) cgl_showinfo_changed(意义不知) 由于第二个cookie不知道是什么,所以就讨论第一个。 第一个cookie存放着你在the9的名字、称号、居住的小区、街道、是否有工作、星级、门牌号等的信息(目前只知道这些,其余的信息不知其意义,具体格式就让给大家去分析了),但是中文都escape过了,如果你用的不是netscpae而是ie的话,不能用unescape得知其信息,因为ie对双字节采用unicode而不采用ascii,如果哪天the9也支持unicode就好了!:),但是其他网站站长注意了,你们可通过cgi的形式把这些the9居民信息抓过来实现数据共享!哈哈……,如果你们真要这么做,就只有使用签名脚本了,总不能让别人编辑hosts吧(不过得注意版权哦!)? ie的cookie漏洞: 如果你用的是ie的话,由于ie本身的漏洞,你大可不必编辑hosts,就可以同样做到读写别的域名的cookie,你可以使用以下的方法欺骗ie(具体的可以去www.cookiecentral.com看看): 假设你的主页文件为http://a.com/cookie.htm, 使用以下url: http://a%2Ecom%2Fcookie%2Ehtm%3F.the9.com […]

Read the rest of this entry »