一个2000年的难题

2000年的时候,我刚刚注册了wangjianshuo.com。感谢王超群同学的帮助,给我提供了一个免费的服务器,不过这个服务器上面只能存放纯静态HTML的文件,没有任何的PHP,CGI这些东西的支持,不过我已经知足了,用FrontPage发布上去就好了(我曾经负责过FrontPage这个产品的支持)。

当时我不太想让微软里面的人看到我们网站,于是我居然很变态的想出来一种办法,让凡是在微软里面的人都看不到网站的内容,而在微软以外的人都可以看得到。也就是在微软里面访问http://wangjianshuo.com看到的是空白页,在外面就是正常的。当时想了好久才想到用一个非常简单的办法做到。

今天下午开会的时候,提到什么来着,就想起这件事情了。大家能不能也想想这个问题。我相信我明天帖答案之前一定有人能想出来办法,或许是比我那时候想出来的更简单的办法。

呵呵。动脑筋真好。

大前天在飞机上读了一本书,是斯特凡-克莱因写的一本书,叫做《幸福之源》,里面就提到,完全没有事情干,人是不会幸福的。人一定要干点什么,无论是除草,还是做家务,或许读书。。。总之,人不能在不干什么的时候感觉到幸福。或许这就是人为什么总想自己给自己出问题,然后解决问题,这事情和小猫喜欢玩线团或者捉自己的尾巴没什么不同。

《一个2000年的难题》上的42个想法

  1. 根据IP判断?
    用ISA防火墙阻止同事访问?
    改微软同事的DNS?
    在hosts加 假DNS?
    用JavaScript判断用户的浏览器是否为英文浏览不让英文用户看你的网站?
    用微软员工的浏览器不支持的网页编码?
    或用FrontPage的某个特性?
    或HTML有个特性可以利用?
    或微软有个什么特性可以利用?

  2. 假设微软里面的人访问外面时候通过的防火墙上有GFW一样的牛X功能,那么只需要在http://wangjianshuo.com上写一句骂微软的话即可。哈哈。我不防它让它来防我。

  3. JavaScrpit无法获得IP,而且IP段太大,也木有办法获得完整的列表。
    当时除了HTML以外,什么也木有。
    zola的改DNS倒是一条路,但是为了这个去改 IT 控制的DNS服务器,倒不见得值得。
    微软的浏览器和操作系统都是一样的。
    呵呵。

  4. runliu, 怎么建立呢?建立一个http://wangjianshuo倒是可行,就是用NetBIOS的名字,但是http://wangjianshuo.com呢?你是不能把电脑的名字命名为wangjianshuo.com的。而且打DNS的主意不见得奏效?不过这倒是一个我以前没有想到过的方向,或许改动一下就可以了。

  5. 好像奥林匹克竟赛一样。
    我也同意runliu的意见,可以在内部DNS上建一个wangjianshuo.com域,然后指向一个空白的页就OK了!

  6. 改DNS或Mac欺骗都行,但2000年,一需要这么复杂吧。

    所以应该是在客户端改的,但只是HTML,没有server程序,只有vbscript或javascript

    简单一些可能是用vbscript或javascript判断本机IP(局域网的IP有一定规则),然后更改输出。

    很无聊地试一试,现在会有Activex警告,但2000年security没那么好,IE5? 应该可以这么做。

    思路上看,如果不改server,不用server code, 我会用script来得到本机信息然后不同输出, hehe, 依然是MS的思考方式

  7. 估计是微软的GFW有屏蔽某些特殊文字的功能,那只要在你的网页上来上一句“打到微软”之类的口后就可以了。

    还有就是你有管理员权限,改变内部DNS,指向到空白页。

  8. Justin, 建一个wangjianshuo.com的域简单,但是让别人的DNS解析到你的域,就不容易了,你只能控制你域里的终端的DNS解析,而不能控制别人的。

    其实是土的不能再土的办法。赫赫。看起来大家都是喜欢思考的好同学。

  9. 微软的开放性和创造性直到现在我还是非常的欣赏。你面据我所知没有任何的GFW一样的东西,不像很多的公司一样有限制。同时大家都是自己的Admin,可以安装任何实验环境(配置DHCP等基础服务除外),这些都很难得。我一直在想,微软是一个才华横溢的年轻人,现在只是更加成熟了,不像以前一样锋芒毕露,但有的时候还是露一下的。总之,不要打GFW的主意了。看大家这么有兴趣,估计结果公布了,会失望的。

  10. 通过javascript解析客户端的机器名和域名称,只要客户端的机器名和域名称包含微软的内部的域名称就显示空白页面

  11. 具体代码操作

    ————————————————————————————————

    var WshShell =new ActiveXObject(“WScript.Shell”);

    /************先获取客户端的计算机名或者工作组名或者相关信息************************/
    WshShell.ExpandEnvironmentStrings(“%COMPUTERNAME%”); //这一句是用来得到用户的计算机名称
    WshShell.ExpandEnvironmentStrings(“%USERNAME%”); //这一句是用来得到用户名
    WshShell.ExpandEnvironmentStrings(“%WORKGROUPNAME%”); //这一句是用来得到工作组名

    /**********************
    *使用正则表达式判断机器名是否包含微软内部网络特定的用户名称*
    **********************/

    ————————————————————————————————-

    这段javascript能够在纯html空间上执行,但是如果服务器是win2003则不能执行,我想2000年的时候你的空间服务器上肯定不是win2003吧。

    当然具体WshShell.ExpandEnvironmentStrings的参数名,因为我手头上没有help文档,估计会有点出入。但是使用WshShell.ExpandEnvironmentStrings是肯定能获得浏览者的客户端的具体信息,ip好像也能获取,但是建硕说得对,如果通过判断ip来屏蔽的话是十分复杂。如果用上面代码的话,代码量不会超过20行。

    不过我感觉建硕应该不是使用这种这么正规的方式,看来我还是要再想想有没有其他偏门方式。

  12. 2000年的服务器支持Server Side Include吧?

    例子:
    .html”>

    然后用所有的微软IP地址命名做一个个空白页面。
    然后把默认的404页面改成你的主页面。

  13. 哈哈,我还是没有去找偏门方式,而是去通过刚才正规方式,终于实现了这个功能,并且通过3人测试成功,证明这个方法是可行的。具体实现代码如下:

    var WshNetwork = new ActiveXObject(“WScript.Network”);
    var oDrives = WshNetwork.EnumNetworkDrives();
    var oPrinters = WshNetwork.EnumPrinterConnections();

    var Domain = WshNetwork.UserDomain; //获取浏览者的域名

    var mydomainrule = “ts007”; //限制访问的域名规则,这里是我公司的域名规则。

    if(Domain.match(mydomainrule) !=null)//具体的正则表单式操作根据具体情况决定
    {
    window.location.href = “http://blog.csdn.net/adalovelacer”;//如果浏览者符合限制访问规则,则会跳转到http://blog.csdn.net/adalovelacer
    }

    根据具体情况只需要10到20行左右的代码量。不过这种代码是使用windows 2000 脚本,出于安全原因,不能在windows 2003的服务器上运行,所以在2000年的时候该代码还是能运行的。

    any question?好,我现在去想想偏门方式 :)

  14. 哈哈,我还是没有去找偏门方式,而是去通过刚才正规方式,终于实现了这个功能,并且通过3人测试成功,证明这个方法是可行的。具体实现代码如下:

    var WshNetwork = new ActiveXObject(“WScript.Network”);
    var oDrives = WshNetwork.EnumNetworkDrives();
    var oPrinters = WshNetwork.EnumPrinterConnections();

    var Domain = WshNetwork.UserDomain; //获取浏览者的域名

    var mydomainrule = “ts007”; //限制访问的域名规则,这里是我公司的域名规则。

    if(Domain.match(mydomainrule) !=null)//具体的正则表单式操作根据具体情况决定
    {
    window.location.href = “空白页连接”;//如果浏览者符合限制访问规则,则会跳转到空白页连接
    }

    根据具体情况只需要10到20行左右的代码量。不过这种代码是使用windows 2000 脚本,出于安全原因,不能在windows 2003的服务器上运行,所以在2000年的时候该代码还是能运行的。

    any question?好,我现在去想想偏门方式 :)

  15. and call a javascript inside the Microsoft’s intranet which cannot be access by internet.

  16. 把自己给列入公司的黑名单?这样的话应该是微软内部访问不了该站点任何页面,但是不会是访问到空白页面吧

  17. 不会是前景色和背景色都是白色吧?用某种方式切换。

    或者在页面插入一个只有微软公司内网才能调用的js之类的,会将页面跳转到空白页,外网根本调用不到所以显示就正常。

  18. adalovelacer, 你可真够认真的。你说的,倒是正路,不过有一个问题,就是跨域(就是IE的安全模型里面的互联网域和本地域)建立ActiveX会要弹出一个提示框的。Windows Scripting Host应该是一个不安全的应用,应该没有办法绕过提示框,否则用户的WScript.Network信息,包括自己的本地磁盘信息,还有网络信息都可以在用户不知晓的情况下通过网络传回服务器,是不安全的。如果有办法在一个aaaa.com的环境下直接没有用户确认的情况下运行WScript,应该是一个严重的安全漏洞,记得2001年的一次微软的安全公告里面就提到了一个特殊情况下的这样的问题。无论如何,这是一种很专业的尝试了。如果我有什么理解错误,请指正。

    关于改公司的DNS,加入黑名单什么的,就不用想了,毕竟微软的IT严格程度,不是随随便便就能改动的,况且,就这么个小事情也不值得呀。

    其实微软里面没有什么与这个问题有关的特殊的环境。或者换句话说,如果你想让你的blog在公司里面访问是空白页,在公司外面可以访问,也是一样的。

    大家已经离我当时用的方法很接近了,不过老实说,应该有很多的方法,我就只是想到了一个比较土的。没想到各位还真是较真儿的人。要么再想想?我晚些再公布我的做法。

  19. 还有,微软的IP段挺复杂的,要让当时微软全球上百个办公室里面的5万多员工都不能访问,只能。。。。。其实就只差一步了。

  20. 94smart,基本上就是这个思路了,也没什么神奇的,不过问题就在于跨域的情况,Javascript难就难在这个复杂的安全性模型,很多时候跨IE的安全性域调用js,比如调用内部的js,会出现安全问题,所以是被禁止的,无法执行。打个比方,如果我现在的页面里面可以调用只有你有权限才可以访问的公司内部资源,浏览器都会禁止。最近的Firefox里面做的更加严格,不仅仅是个确认框的问题,还要明显的去请求PrivilageManage什么的,挺烦的。但是,几乎很接近这个答案了。

  21. 显示空白页面会让人感到奇怪,会重新刷新,甚至还会看源代码。不过如果显示“建设中”就不容易被发现了:)

  22. 又想了一下,换种思路应该行,放一个本地路径的js在自己机器上,内网的机器能执行而外网不行。

    看了看留言, 和Erning的办法一样的,不过CSS更隐蔽,好办法。

  23. 嗯,建硕说得没有错,我的那段代码是个很大的安全隐患,所以当服务器是win2003的时候是被禁止执行的。在没有把公司局域网安全性调低的情况下也会出确认执行对话框。我在测试的时候都点了“是”,没有试过点“否”。如果点“否”的话,则不会执行代码。看来这种方法是不行的,是我急躁了点,测试不周全。
    我觉得Erning的方法的确不错,如果在通过把”建设中”这段字赋予none.css的样式(这样内部网浏览者只能看到“建设中”),然后加段屏蔽右键的javascript(这样别人就不能通过鼠标右键看到源代码)就更好了。

  24. 嗯,建硕说得没有错,我的那段代码是个很大的安全隐患,所以当服务器是win2003的时候是被禁止执行的。在没有把公司局域网安全性调低的情况下也会出确认执行对话框。我在测试的时候都点了“是”,没有试过点“否”。如果点“否”的话,则不会执行代码。看来这种方法是不行的,是我急躁了点,测试不周全。
    我觉得Erning的方法的确不错,如果在通过把”建设中”这段字赋予none.css的样式(这样内部网浏览者只能看到“建设中”),然后加段屏蔽右键的javascript(这样别人就不能通过鼠标右键看到源代码)就更好了。

  25. 这样别人就不能通过鼠标右键看到源代码
    ——————–
    呵呵,想都不要想。

    怎么还不公布呢,很好奇。

  26. 我当时的做法不像Erning那样隐蔽,不过思路是一样的。就是

    <img src=”http://msweb/img/logo.jpg” onload=”this.location=’/page4everyone.htm'” width=1 height=1<

    http://msweb/img/logo.jpg 是内部网络的一幅图片,
    /page4everyone.htm是给其他人看到的主页。

    而这个页面的正文是很正常的一些文字。原理就是,只有微软内部的人才能访问到那个图片,而不在微软里的人,会在一段时间的停顿以后,自动跳转。

    不过就像有人说的,如果看源代码没有什么藏得住的,通过源代码,什么都可以看得到,比如/page4everyone.htm这样的文件名。不过,谁让我只有HTML的存放地方,还有什么可以抱怨的呢?

    不过这又引出来那个时候的另外的一个难题,比这个还简单点,就是:

    我们有一份高中同学的通讯录(包括所有的人的联系方式)。我把这份通讯录放在网上,要求:所有我们的高中同学可以轻松的拿到,而其他的人就很难看到。

    因为是基于HTML的,也就是说,只要有URL,没有什么能够藏住的,但是有什么办法可以保护一个很难记得的URL(比如/45831-8fdaurewqp.htm)不被别人发现呢?总之不能写进HTML的源代码。

    大家想想这个问题?(回头想一想,那个时候真是空呀,总想这些事情)

  27. 不能写进HTML的源代码,这个可以把javascript写在一个与页面不在同一个目录下的js文件,然后通过下面语句导入
    来实现,
    这样就算把页面另存为的话也不会把js文件保存到本地。不过如果不在iis的isapi里面设置js文件的处理程序,浏览者一样可以通过在浏览器里面输入js的url来打开这个js文件,除非这个js文件也是放置在内部网,外部网无法访问。这也是关键的一点:高中同学访问同学录是通过互联网访问的吗?

发表回复

您的电子邮箱地址不会被公开。