如何判断客户是从本网站网页内的链接来访问, 还是从别的网站直接访问的?

k2222hk 2002-02-01 03:10:13
有的网站有内链接保护功能, 对于本网站的图片只能由本网站的网页点击后, 才能被访问到, 如果不是本网站内的网页点击进入的, 就会出现404错.
我试了试,主要表现是:
先到该站网页的某一链接( 指向该站内的/xx.jpg), 右键"从新窗口打开...",
很正常, 出现该链接指向的XX.jpg.
但是从右键复制URL地址后, 重新开一个IE窗口, 粘贴URL, 回车, 获取 xx.jpg出错404.
仔细查看了前一网页的HTML代码, 无任何 脚本 JAVA VBScript 等. 非常正常.
 本机未出现任何cookie.

我用我的PERL  ENV.pl获取所有参考书上所写的客户端变量,  用二种方式试试,
得出的结果都是一样..

我很惊讶,  那么这是怎么实现的? (唯一可能性是重编了socket)

请问如何实现?  或者请讲讲原理.

...全文
1958 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xexplorer 2002-02-15
  • 打赏
  • 举报
回复
你参考一下delphi的isapi这部分,应该有这方面的资料的。
k2222hk 2002-02-05
  • 打赏
  • 举报
回复
大致原因我了解了,最大的可能性是服务器每次自动检查对.jpg图形的HTTP链接的头部,
可能针对 HTTP_REFERER 的.
我用perl做了一个修改自身发送http::header的东西,估计可以.
但由于我的客户端却是VB或DEPHI的
怎样改自已用Internet Transfer Control控件发出的HTTP链接的header中的 referer成了我的一个大问题.
xexplorer 2002-02-02
  • 打赏
  • 举报
回复
x-explorer@sohu.com
k2222hk 2002-02-01
  • 打赏
  • 举报
回复
你的email ?
xexplorer 2002-02-01
  • 打赏
  • 举报
回复
至于你说的那个session是否保持的问题我觉得很奇怪,我想是网络不通畅吧。要不你给我那个网站的地址,我去试试。
xexplorer 2002-02-01
  • 打赏
  • 举报
回复
刚才我在自己的机子上试了试,我先把cookie删掉,然后访问我自己机器上的server建立一个session,结果我发现我的机器上竟然也没有cookie,呵呵,奇怪吧。而且不管什么Web server我想它都不会为每一个文件连接建立一个session的,那样的话服务器早该被拖死机了。我没有研究过ie的行为,不过我想它不会用http通信以外的方式与web服务器联系的,在http数据报中不会包含history变量的,你可以看看http的报文。
GET /aaa.jpg HTTP/1.0
Connection:Keep-Alive
User-Agent:Mozilla/3.0b4gold
Host: www.yourweb.com
Accept: image/jpg ……
你看这里哪能保存history变量呢,就算是post方式的http数据报也只能以form的形式提交数据。所以socket也不能帮什么忙的。
k2222hk 2002-02-01
  • 打赏
  • 举报
回复
请教xexplorer:
 如果一个iE窗口里获取一个HTML网页后,建立了一个session,然后在未过期之前,点击一个.jpg的缩略图,获取.jpg成功.
 回退.迅速重现了刚才HTML页面.
 在当前的窗口里输入刚才的.jpg文件URL,获取出错.
 再回退.迅速重现刚才HTML页面.
 在当前窗口再按一下刚才.jpg的缩略图,获取404错误.
 回退,重现html.
 选择其它.jpg的缩略图,获取成功.

 此时session是保持着呢,还是没保持着?
k2222hk 2002-02-01
  • 打赏
  • 举报
回复
你讲的非常有道理,但我想应该没有session. COOKIE是肯定没有的.
因为我直接请求失败的是.jpg文件,服务器能不能在.jpg上验证session?

我做了这些:在该服务器上临时建了一个HTM,先记页面的URL,HTM后缀,该页无任何内嵌的标记.
 先断开网络,再拨号上网.清理了cookie.
马上进入该页,(而这一页根本就是刚刚我临时自建的HTM),就可以点击下一步的该页的链接图片,获得成功.查看自身机器内的cookie,未发现新的cookie.
 直接在IE里输入该图的url路径,获取失败.

我想:可能性会不会有以下可能:
  1,服务器上对任意后缀的文件都建了一个保护机制(内链接保护),有点象有些服务商的免费空间的banner条,你在你自己的html代码里不写任何代码,也会出现服务商的banner. 我映象中NT的internet服务器管理项好象有点之类的东西(好长时间没用NT),然后,在任意文件上加了一个自动的session?  但问题是.jpg上也可以验证session?

2 ,在socket编程底部,是否有传递IE的'history'变量,即"后退"项?
   自编WEB服务器的大有人在.但我对这些底层的东西只了解了表面的东东,还不会.

注:谢谢xexplorer. 5点
xexplorer 2002-02-01
  • 打赏
  • 举报
回复
session的建立并不一定要登陆呀,那还不全在于你的意愿么,只要你在用户登陆首页时建立一个session,然后在后续的页面中进行校验不就行了么,我想他总不能连首页都不能登陆吧,限制也是限制其它页的访问,这样客户端肯定只是HTML,至于你说没有Cookie我想不大可能吧,http是无状态的协议除了用Cookie和基于Cookie的session或url带回数据或者form数据隐藏不可能靠其他的方法来实现这样的功能的吧。
k2222hk 2002-02-01
  • 打赏
  • 举报
回复
你说的这种方法是用来保持客户端状态的. 需要登录.建立session后, 开另一个IE窗,是同样能保持状态的.
不是我说的内链接保护. 

因为我说过了前一页是标准的HTML3.0源码,里面什么也没有.并无任何调用jsp及cookie.且网站内部的HTML大多是别的用户动态编写的,不可能有任何编写的机会.

我想问:有没有底层的变量可以识别客户端的"history"?
xexplorer 2002-02-01
  • 打赏
  • 举报
回复
我是用JSP和Servlet的,不过我想都应该类似。应该是建立一个Session然后再用户登陆后在Session中加入一个标志,这样在进入需要保护的页面是判断这个标志是否存在,或者用cookie来实现也行。

2,203

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧