判断浏览器引用地址的方法有哪些?方法是什么?
优采云 发布时间: 2021-06-08 23:23判断浏览器引用地址的方法有哪些?方法是什么?
方法一:确定参考地址
这个方法是最早也是最常用的方法。所谓判断引用地址,就是在浏览器请求时判断HTTP头的Referer字段的值。该值可以通过 Request.UrlReferrer 属性获得。举几个例子,一般情况下,当用户在浏览时点击一个链接去一个文件,浏览器也会包含浏览器发送jacky请求时的页面地址(即浏览器所在的页面地址)。 mp3资源,所以当你的网站程序收到下载jacky.mp3资源的请求时,首先确定http referer字段的值。如果是来自自己的域名(),可以认为是合法的连接请求,否则会返回错误信息。
这种方法通常用于图片和mp3,容易用html“嵌入”到其他网站资源中。使用这种方法可以防止你的图片直接出现在别人的网页上(或者防止mp3被其他网站直接嵌入到flash播放器中),但是访问者还是可以很方便的使用下载工具下载,因为目前的下载工具一般都是自动的用你的域名构造一个引用地址,所以如果你想进一步防范,你可以使用对应表来限制每个资源的引用地址,例如将jacky.mp3的引用地址限制为,这样下载工具不太可能构建“正确”的引用地址。
方法二:使用登录验证
这种方法在论坛和社区中很常见。当访问者在网站上请求资源时,首先判断该请求是否通过登录验证(通常使用会话或表单验证来记录登录状态),如果未登录,则会返回错误信息。使用该方法可以进一步判断登录用户的权限是否足够,从而实现有“权限”的下载。
但是,由于登录状态依赖于session id,而session id往往存储在http请求的cookie字段中,下载工具一般无法获取浏览器的cookie字段,所以这些资源往往无法获取使用下载工具下载。合法用户带来诸多不便(因为大部分网友的系统中都安装了下载工具,点击下载链接一般会被下载工具屏蔽,导致无法使用浏览器本身的下载功能)。简单的解决方案是将此会话 ID 放在 URL 中。
这种方式的另一个缺点是访问者不能匿名下载,所以这种方式一般只用于论坛和社区网站。
方法 3:使用 cookie
其实这个方法原理和方法二差不多。就是在显示“下载”链接的页面上生成一个带有动态值的cookie,然后在处理资源下载请求时首先判断cookie中是否有正确的cookie,如果没有则返回错误信息。至于如何生成这个动态值,只要能反向判断动态值是否合法,比如将当前时间除以秒数就可以得到哈希值(也叫哈希值)。如果网页程序比较简单,可以在session中随意存储一个字符串或者数字,然后在处理下载请求的时候检查session中是否存在这个字符串或者数字。使用此方法的缺点与方法2相同。
方法四:使用POST下载
客户端浏览器使用 HTTP GET 方法请求资源。其实POST方法也可以用来向客户端返回数据。所以你可以用一个表单(Form)和一个按钮(Submit)代替下载链接,把要下载的文件的名字或id放在表单的隐藏文本框(Input)中。当用户点击提交按钮时,服务程序首先判断请求是否为POST方式,如果是,则读取目标资源的二进制数据并写入响应对象(本例中为responder.BinaryWrite方法)。
使用这种方式的缺点也是无法使用下载工具,无法实现断点续传。不过,下载工具不会拦截您的下载操作,比方法二和方法三要好,这样普通用户下载文件就更顺畅了。这种方式更适合下载小文件。
方法五:使用图文验证码
使用这种方法可以确保每次下载都是“人”在你的网站上下载,而不是下载工具。因为网上使用图文验证码的方法很多,这里就不再赘述了。这种方法的缺点是普通用户更容易感到困扰。
方法六:使用动态文件名
它也称为动态密钥方法。当用户点击下载链接时,首先在终端计算出一个Key(使用定期生成的Key,最好不要使用GUID等随机字符串,并且这个Key必须有定时有效性),然后记录这个Key及其数据库或Cache中对应的资源ID或文件名,最后将网页重定向到一个新的URL地址,该地址需要收录这个Key。当浏览器或下载工具发出下载请求时,程序首先检测Key是否存在,如果存在则返回相应的资源数据。
使用这种方法的好处是下载工具也可以下载,并且可以在Key失效前恢复下载,并且可以通过Key控制下载线程数。
使用这种方法(包括上述所有支持下载工具的方法)的缺点是:当任何用户下载成功时,你的资源会被一些下载工具收录在“候选资源列表”中,而其他的则会被列出在其他地方下载同一个文件时,下载工具会继续连接你的服务器,即使你的文件已经被删除或者Key已经过期,这都会造成类似DDos攻击的后果。这里还有两个可以通过下载工具下载的,以及防止盗链的方法。
方法七:未经授权修改资源内容
一般比较流行的资源有电影、mp3、较大的压缩包等,这些文件有很多地方可以插入数据。比如mp3有标签区,rar/zip有备注区。电影的内容可以在任何地方,只要在下载过程中动态注入一些随机字节(几个字节就足够了),以及整个文件的哈希值(即哈希值,指纹Value) 的变化,使得从你的网站下载的文件的hash值和其他的不一样,可以防止下载工具主动查找。将此方法与方法6配合使用,可以达到更好的防蚂蟥效果。缺点是虽然文件的修改部分不会被“看”或“听”,但对于知道的人来说,或多或少会让人不舒服。另外,如果别人把你从网站下载的文件放到其他网站,那么还是会出现下载工具主动找门的情况(虽然实际上是无法下载内容的)。
方法八:打包下载
这个方法和方法七一样,只不过这次不是修改原文件,而是在原文件中加了一个“shell”,使资源的hash值与其他的不同。相同的。使用这种方法,可以在不篡改资源原有内容的情况下,达到方法6的效果,如果再硬一点,甚至可以在打包时放一些自己的广告。缺点是用户每次下载都要加压缩,但目前大部分人都知道怎么解压,所以这个缺点有时可以忽略。