1. Request.AppRelativeCurrentExecutionFilePath,获取当前执行请求相对于应用根目录的虚拟路径,以~开头,比如"~/default.ashx"
  2. Request.PhysicalApplicationPath,获取当前应用的物理路径,比如:d:\VS2010\website\
  3. Request.PhysicalPath,获取当前请求的物理路径,即包括文件名,比如:d:\vs2010\website\default.aspx
  4. Request.RawUrl,获取原始请求的URL、Request.Url获得请求的URL,区别涉及到URL重写的问题
  5. Request.UrlReferrer:网页来源,可以根据这个判断访问的网页是来源于哪里,可以防搜索,防下载盗链、防图片盗链,也可以伪造,比如我们可以设置一下一个图片只能内部使用,其它的连接是不能用的。全局防盗链用Globals.asax.
  6. Request.UserHostAddress,获得访问者的IP地址
  7. Request.UserLanguages:获得访问者浏览器支持的语言,可以通过这个实现不同语言的人显示不同语言的页面。
  8. Request.Cookies,获取浏览器发过来的浏览器端的Cookie,从它里面读取Cookie的值,比如Context.Request.Cookies["sessionid"],使用Request.Cookies的时候一般只是读取,将Cookie写回浏览器要用Response.SetCookies[].
  9. Request.MapPath(virtualPath),将虚拟路径转为磁盘上的物理路径。

分别执行以上的函数:如下代码:

 protected void Button1_Click(object sender, EventArgs e)
{
string br = "<br />";
Response.Write("AppRelativeCurrentExecutionFilePath: "+Request.AppRelativeCurrentExecutionFilePath+br);
Response.Write("PhysicalApplicationPath: "+Request.PhysicalApplicationPath+br);
Response.Write("PhysicalPath: "+Request.PhysicalPath+br );
Response.Write("RawUrl: "+Request.RawUrl+br);
Response.Write("UrlReferrer: "+Request.UrlReferrer.Host + br);
Response.Write("UserHostAddress: "+Request.UserHostAddress + br);
Response.Write("UserHostName: "+Request.UserHostName + br);
Response.Write("UserLanguages: "+Request.UserLanguages[0] + br);
Response.Write("MapPath: "+Request.MapPath("~/Default.aspx")); }

则它们的显示结果为:

以下为防盗链的,主要用到UrlReferrer对象,在httpwatch中可以看到Request提示报文时有这么个对象。

我们在客户端浏览一张图片,检测一下这个对象的值,如果它的值为null,说明这个request不是从客户端的指定页面过来的,是直接运行了处理程序,就为null.如果是Request.UrlReferrer.Host为localhost则可以正常浏览,如果不是localhost则表明提交的网页来自其它网址,拒绝它访问。

服务端,我们用一般程序处理:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging; namespace 防盗链
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/JPEG";
string picpath = context.Server.MapPath("~/imgs/2.jpg"); using (Bitmap bmp = new Bitmap(picpath))
{
using (Graphics g = Graphics.FromImage(bmp))
{
if (context.Request.UrlReferrer == null)//如果直接浏览,则UrlReferrer为null
{
g.Clear(Color.White);
g.DrawString("禁止直接浏览图片,请在页面中查看图片", new Font("宋体", 30), Brushes.Red, 0, 0);
}
else if (context.Request.UrlReferrer.Host != "localhost")
{
g.Clear(Color.White);
g.DrawString("本图片仅限本机用", new Font("宋体", 30), Brushes.Red, 0, 0);
}
}
bmp.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
} public bool IsReusable
{
get
{
return false;
}
}
}
}

客户端我们就用个超连接即可:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<a href="Handler1.ashx">图片</a>
</div>
</form>
</body>
</html>

当我们直接在浏览器中访问一般处理程序时,即http://localhost:6023/Handler1.ashx,则Request.UrlReferrer为null,如果把localhost改成127.0.0.1,则它拒绝访问。

Request的属性和防止图片被盗链的更多相关文章

  1. 第十三节:HttpHander扩展及应用(自定义扩展名、图片防盗链)

    一. 自定义扩展名 1. 前言 凡是实现了IHttpHandler接口的类均为Handler类,HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...

  2. php如何控制用户对图片的访问 PHP禁止图片盗链(转载)

    把images目录设置成不充许http访问(把图片目录的:读取.目录浏览 两个权限去掉). 用一个PHP文件,直接用file函数读取这个图片.在这个PHP文件里进行权限控制. apache环境中,在你 ...

  3. php如何控制用户对图片的访问 PHP禁止图片盗链

    本文摘自网络仅供学习只用 本人根据教程总结了一下https://www.imooc.com/video/13412 主要是利用apache的htacess进行控制,,拿什么判断是不是通过本站点访问的呢 ...

  4. php图片防盗链

    利用.htaccess 重写规则防止图片被盗链 2. 找到httpd.conf 打开重写规则 3.

  5. 网站资源被盗链的:预防方法 VS 网站资源防盗链的:破解技巧

    1 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问! 1 资源被盗链:(简明定义) 下载者不是从你的网站直接下载资源,而是通过其他盗链网站提供的你的下载资源链接进行下载你的服务 ...

  6. 知乎日报 API的图片盗链问题

    由最近 基于vue的知乎日报单页应用 引发的问题 以及问题解决历程 通过 知乎日报API 基于vue做一个知乎日报的单页应用,在获取图片时存在一个图片盗链问题,图片无法加载 提示 403 错误, 最终 ...

  7. webform的图片防盗链

    最近用到域的问题,不是同一主机的请求将不允许请求此页面. 这其实和图片防盗链的本质是一样的. 通过两个属性:由于当时用的aspx视图引擎,所以需要通过HttpContext.Current才能拿到ht ...

  8. Django项目开发,XSS攻击,图片防盗链,图片验证码,kindeditor编辑器

    目录 一.Django项目开发 1. 项目开发流程 2. auth模块的补充 (1)django的admin可视化管理页面 (2)将admin可视化管理页面的模型表显示成中文 (3)auth模块的用户 ...

  9. nginx安全:配置网站图片防盗链

    一,为什么要做防盗链? 1,什么是盗链? 比如某人有一个A网站, 他不愿自己存储图片,(因为磁盘和带宽都有成本) 就在自己A网站的页面上直接插入B网站的图片, 从而为自己吸引流量,这就是盗链 2,为什 ...

随机推荐

  1. Coreseek-带中文分词的Sphinx

    Sphinx并不支持中文分词, 也就不支持中文搜索, Coreseek = Sphinx + MMSEG(中文分词算法) 1.下载 1).到官网下载 2).解压后有三个文件夹 csft-3.2.14: ...

  2. 前端纯css 图片的模糊处理

    最近做的一个项目需要用到背景图的模糊处理,在网上查资料,发现用css的 filter 属性就可以解决,但是因为模糊度比较高,四周会有很长的模糊边,百度上也没找到解决的方法,,可喜的是最后我在分析一个d ...

  3. android:imeOptions属性

    imeOptions软键盘setOnEditorActionListener  默认情况下软键盘右下角的按钮为“下一个”,点击会到下一个输入框,保持软键盘 设置 android:imeOptions= ...

  4. 解决异常断电导致的: CorruptSSTableException: java.io.EOFException

    问题产生 服务器重启,导致cassandra损坏,整个集群不可用.所使用的cassandra为2.1.9版本. 问题描述 运行启动命令,报错如下: DEBUG :: All segments have ...

  5. word2vector 理解入门

    1.什么是word2vector? 我们先来看一个问题,假如有一个句子 " the dog bark at the mailman". 假如用向量来表示每个单词,我们最先想到的是用 ...

  6. Mac 上的一些骚操作和技巧

    0.自定义mac touch bar 上的图标 系统偏好设置-键盘-自定义control strip.. 接下来就精彩了:先用手指按住你touch bar 的siri,然后移到最左边的删除图标,将它移 ...

  7. 深入Activity

    此刻,你应该静下心来,在阅读中思考.在思考中进步,读完本篇文章的你一定会有不一样的收获,请让我们共同进步! 核心内容 1.Activity数据交换 2.Activity中的任务栈 3.Activity ...

  8. SYN攻击防护措施

    SYN攻击的应对措施 针对SYN攻击的几个环节.提出对应的处理方法: 方式1:降低SYN-ACK数据包的重发次数(默认是5次): sysctl -w net.ipv4.tcp_synack_retri ...

  9. makefile之调试信息

    makefile 调试 1. 添加调试信息 执行到error时会中断,warning不中断makefile的执行, info不打印当前makefile名和行号. a.$(warning "s ...

  10. 兼容IE getElementsByClassName取标签

    function getElementsByClassName(className,root,tagName) { //root:父节点,tagName:该节点的标签名. 这两个参数均可有可无 if( ...