但是图片 .jpg,.png 等,由于iis 会直接处理,请问有什么方法可以拦截做自定义的认证等呢?
我这里还有个限制,iis 部署在hosting 公司,我只能通过 web.config做设置。
这次项目对安全比较重视,我是新手,希望大家多多提点 !
万分感激!!
15 个解决方案
#1
图片文件放在网站根目录外面,通过单独的程序进行读取,读取之前先做权限认证
#2
通过ashx来输出图片,输出前验证是否与权限
#3
CityBird
能说具体点吗?
ashx 要改全部的src ,不理想。
是否有直接拦截的方案?
能说具体点吗?
ashx 要改全部的src ,不理想。
是否有直接拦截的方案?
#4
httpmodule 可以拦截。
#5
设置图片的访问权限
//呈现图片显示数据
<asp:DataList ID="DataList1" runat="server" RepeatColumns="2" Width="600px" Height="403px">
<ItemTemplate>
<table style="font-size: 10pt; height: 100px" border="0" cellpadding="0" cellspacing="0">
<tr>
<tr>
<td rowspan="6" style="width: 120px; height: 100px;">
<img alt="查看图片" id="image" src='<%#Eval("Images")%>' style="border: 0" width="100" />
</td>
<td style="width: 220px; height: 20px; text-align: left; font-size: 9pt; vertical-align: middle;">
客户名称:<%# Eval("UserName") %>
</td>
</tr>
<tr>
<td style="width: 220px; height: 20px; text-align: left; vertical-align: middle">
地址:<%# Eval("Province") %>省<%# Eval("city") %>市
</td>
</tr>
<tr>
<td style="width: 220px; height: 20px; text-align: left; vertical-align: middle">
QQ号码:<%# Eval("QQ") %>
</td>
</tr>
<tr>
<td style="width: 220px;">
昵称:<%# Eval("sex") %>
</td>
</tr>
<tr>
<td style="width: 220px;">
详细信息:<a href='xiang_xi.aspx?HenuID=<%#Eval("HenuID") %>'><%# Eval("UserName") %></a>
</td>
</tr>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
//点击详细信息跳转页面显示详细信息
//显示用户的详细信息
protected void bindUserInfo()
{
//编写SQL语句查询当前登录用户的详细信息
string sqlSel = "select * from tb_huen_lian where UserName='" + Session["UserName"].ToString() + "' and SuperAdmin='True'";//根据记录的图片名称和登录权限决定是否呈现图片信息;
//调用公共类中的getRow方法并接收返回的SqlDataReader对象
SqlDataReader sdr = operateData.getRow(sqlSel);
//读取一条数据
sdr.Read();
txtName.Text = sdr["UserName"].ToString();
txtMphone.Text = sdr["Mphone"].ToString();
//显示用户的QQ
txtQQ.Text = sdr["QQ"].ToString();
//获取图片路径
txtICQ.Text = sdr["ICQ"].ToString();
txtZhiYie.Text = sdr["ZhiYie"].ToString();
txtNickname.Text = sdr["nickName"].ToString();
imgpath = sdr["Images"].ToString();
//显示用户的图片
ImageHead.ImageUrl = imgpath;
txtShenGao.Text = sdr["ShenGao"].ToString();
txtshouru.Text = sdr["shouru"].ToString();
txtlname.Text = sdr["lname"].ToString();
txtwaimao.Text = sdr["waimao"].ToString();
txtxihao.Text = sdr["xihao"].ToString();
//显示用户的留言
sdr.Close();
}
//呈现图片显示数据
<asp:DataList ID="DataList1" runat="server" RepeatColumns="2" Width="600px" Height="403px">
<ItemTemplate>
<table style="font-size: 10pt; height: 100px" border="0" cellpadding="0" cellspacing="0">
<tr>
<tr>
<td rowspan="6" style="width: 120px; height: 100px;">
<img alt="查看图片" id="image" src='<%#Eval("Images")%>' style="border: 0" width="100" />
</td>
<td style="width: 220px; height: 20px; text-align: left; font-size: 9pt; vertical-align: middle;">
客户名称:<%# Eval("UserName") %>
</td>
</tr>
<tr>
<td style="width: 220px; height: 20px; text-align: left; vertical-align: middle">
地址:<%# Eval("Province") %>省<%# Eval("city") %>市
</td>
</tr>
<tr>
<td style="width: 220px; height: 20px; text-align: left; vertical-align: middle">
QQ号码:<%# Eval("QQ") %>
</td>
</tr>
<tr>
<td style="width: 220px;">
昵称:<%# Eval("sex") %>
</td>
</tr>
<tr>
<td style="width: 220px;">
详细信息:<a href='xiang_xi.aspx?HenuID=<%#Eval("HenuID") %>'><%# Eval("UserName") %></a>
</td>
</tr>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
//点击详细信息跳转页面显示详细信息
//显示用户的详细信息
protected void bindUserInfo()
{
//编写SQL语句查询当前登录用户的详细信息
string sqlSel = "select * from tb_huen_lian where UserName='" + Session["UserName"].ToString() + "' and SuperAdmin='True'";//根据记录的图片名称和登录权限决定是否呈现图片信息;
//调用公共类中的getRow方法并接收返回的SqlDataReader对象
SqlDataReader sdr = operateData.getRow(sqlSel);
//读取一条数据
sdr.Read();
txtName.Text = sdr["UserName"].ToString();
txtMphone.Text = sdr["Mphone"].ToString();
//显示用户的QQ
txtQQ.Text = sdr["QQ"].ToString();
//获取图片路径
txtICQ.Text = sdr["ICQ"].ToString();
txtZhiYie.Text = sdr["ZhiYie"].ToString();
txtNickname.Text = sdr["nickName"].ToString();
imgpath = sdr["Images"].ToString();
//显示用户的图片
ImageHead.ImageUrl = imgpath;
txtShenGao.Text = sdr["ShenGao"].ToString();
txtshouru.Text = sdr["shouru"].ToString();
txtlname.Text = sdr["lname"].ToString();
txtwaimao.Text = sdr["waimao"].ToString();
txtxihao.Text = sdr["xihao"].ToString();
//显示用户的留言
sdr.Close();
}
#6
假定你的网站根目录是d:\web\,你把有权限验证的图片放在别的目录底下例如d:\pictures\,只要不是d:\web\目录及其子目录就行,这样通过浏览器是不可能直接访问到d:\pictures\目录中的文件的,然后你再单写一个读取图片的专用程序例如loadpic.ashx,通过<img src="loadpic.ashx?pic=aaa.jpg" />这样的方式进行引用 ,然后在loadpic.ashx里面先做权限检查,再去d:\pictures\目录底下找aaa.jpg文件,最后通过二进制方式输出aaa.jpg的内容就OK了
#7
先感谢大家的帮助!
httpmodule 拦截不到 images (可能iis 配置的问题)
http://www.cnblogs.com/hiearth/archive/2009/12/08/1619662.html
我和他的问题类似,最后他说在iis中的应用程序映射中没有对应.jpg,.png的扩展名,添加就可以了,我不清楚"添加"怎么做,是否可以在web.config中实现.
我不希望修改 src
我目前有个实现方法,就是通过web.config 写一个 url rewrite , 把图片访问 direct 到一个ashx 来做验证和输出。
还有什么好方案吗?
httpmodule 拦截不到 images (可能iis 配置的问题)
http://www.cnblogs.com/hiearth/archive/2009/12/08/1619662.html
我和他的问题类似,最后他说在iis中的应用程序映射中没有对应.jpg,.png的扩展名,添加就可以了,我不清楚"添加"怎么做,是否可以在web.config中实现.
我不希望修改 src
我目前有个实现方法,就是通过web.config 写一个 url rewrite , 把图片访问 direct 到一个ashx 来做验证和输出。
还有什么好方案吗?
#8
跟web.config没有关系
IIS6以上,在本地计算机右键属性->MIME设置里,能看到所有支持的扩展名,添加进去
#9
我无法直接控制计算机,只能通过web.config做设置。
还有方法吗?
还有方法吗?
#10
在web.config 中配置访问权限,例如:
这么设置只有,只有admin能访问,其他user都不能。也可以通过role 为一组人设置权限。
请查看: http://blog.itpub.net/12639172/viewspace-622138/
http://msdn.microsoft.com/zh-cn/library/8d82143t%28v=vs.85%29.aspx
<location path="UploadImage">
<system.web>
<authorization>
<deny users="?"/>
<allow users="admin"/>
</authorization>
</system.web>
</location>
这么设置只有,只有admin能访问,其他user都不能。也可以通过role 为一组人设置权限。
请查看: http://blog.itpub.net/12639172/viewspace-622138/
http://msdn.microsoft.com/zh-cn/library/8d82143t%28v=vs.85%29.aspx
#11
SPFarm 谢谢回复。
#12
httpmodule 可以拦截。
你在注册请求的后缀名必须经过你写的httpmodule 处理就可以拉
搜索一下 httpmodule 图片防盗 原理是相通的
你在注册请求的后缀名必须经过你写的httpmodule 处理就可以拉
搜索一下 httpmodule 图片防盗 原理是相通的
#13
http://www.cnblogs.com/RascallySnake/archive/2010/01/10/1643689.html
这一篇有点长,有点旧,不知道是否还能采纳。
高手帮我看一下。
iis 对静态文件是直接返回的,不会走程序,所以httpmodule拦截不到。
文中也说明只要在iis设定添加后缀就行了。和 #12 说的一样.
我开始就一直强调说明了这一点,我只能通过web.config去做配置。我无法直接进入server 设置iis .
所以能通过web.config 来设置添加 iis 对.jpg,.png 后缀处理吗?
这一篇有点长,有点旧,不知道是否还能采纳。
高手帮我看一下。
iis 对静态文件是直接返回的,不会走程序,所以httpmodule拦截不到。
文中也说明只要在iis设定添加后缀就行了。和 #12 说的一样.
我开始就一直强调说明了这一点,我只能通过web.config去做配置。我无法直接进入server 设置iis .
所以能通过web.config 来设置添加 iis 对.jpg,.png 后缀处理吗?
#14
可以用<hiddenSegments>配置节来实现拒绝对该目录下所有文件的访问权限,然后用自定义的httphandler来处理图片请求,参看过里:
http://www.iis.net/configreference/system.webserver/security/requestfiltering/hiddensegments
http://www.iis.net/configreference/system.webserver/security/requestfiltering/hiddensegments
#15
用了 #12 的方案
感谢大家的回复。问题解决了。
hosting 公司替我做了iis 设置。
依据#14,和我读到的一些 iis7的设置,似乎web.config 也可以设置得到。
感谢大家的回复。问题解决了。
hosting 公司替我做了iis 设置。
依据#14,和我读到的一些 iis7的设置,似乎web.config 也可以设置得到。
#1
图片文件放在网站根目录外面,通过单独的程序进行读取,读取之前先做权限认证
#2
通过ashx来输出图片,输出前验证是否与权限
#3
CityBird
能说具体点吗?
ashx 要改全部的src ,不理想。
是否有直接拦截的方案?
能说具体点吗?
ashx 要改全部的src ,不理想。
是否有直接拦截的方案?
#4
httpmodule 可以拦截。
#5
设置图片的访问权限
//呈现图片显示数据
<asp:DataList ID="DataList1" runat="server" RepeatColumns="2" Width="600px" Height="403px">
<ItemTemplate>
<table style="font-size: 10pt; height: 100px" border="0" cellpadding="0" cellspacing="0">
<tr>
<tr>
<td rowspan="6" style="width: 120px; height: 100px;">
<img alt="查看图片" id="image" src='<%#Eval("Images")%>' style="border: 0" width="100" />
</td>
<td style="width: 220px; height: 20px; text-align: left; font-size: 9pt; vertical-align: middle;">
客户名称:<%# Eval("UserName") %>
</td>
</tr>
<tr>
<td style="width: 220px; height: 20px; text-align: left; vertical-align: middle">
地址:<%# Eval("Province") %>省<%# Eval("city") %>市
</td>
</tr>
<tr>
<td style="width: 220px; height: 20px; text-align: left; vertical-align: middle">
QQ号码:<%# Eval("QQ") %>
</td>
</tr>
<tr>
<td style="width: 220px;">
昵称:<%# Eval("sex") %>
</td>
</tr>
<tr>
<td style="width: 220px;">
详细信息:<a href='xiang_xi.aspx?HenuID=<%#Eval("HenuID") %>'><%# Eval("UserName") %></a>
</td>
</tr>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
//点击详细信息跳转页面显示详细信息
//显示用户的详细信息
protected void bindUserInfo()
{
//编写SQL语句查询当前登录用户的详细信息
string sqlSel = "select * from tb_huen_lian where UserName='" + Session["UserName"].ToString() + "' and SuperAdmin='True'";//根据记录的图片名称和登录权限决定是否呈现图片信息;
//调用公共类中的getRow方法并接收返回的SqlDataReader对象
SqlDataReader sdr = operateData.getRow(sqlSel);
//读取一条数据
sdr.Read();
txtName.Text = sdr["UserName"].ToString();
txtMphone.Text = sdr["Mphone"].ToString();
//显示用户的QQ
txtQQ.Text = sdr["QQ"].ToString();
//获取图片路径
txtICQ.Text = sdr["ICQ"].ToString();
txtZhiYie.Text = sdr["ZhiYie"].ToString();
txtNickname.Text = sdr["nickName"].ToString();
imgpath = sdr["Images"].ToString();
//显示用户的图片
ImageHead.ImageUrl = imgpath;
txtShenGao.Text = sdr["ShenGao"].ToString();
txtshouru.Text = sdr["shouru"].ToString();
txtlname.Text = sdr["lname"].ToString();
txtwaimao.Text = sdr["waimao"].ToString();
txtxihao.Text = sdr["xihao"].ToString();
//显示用户的留言
sdr.Close();
}
//呈现图片显示数据
<asp:DataList ID="DataList1" runat="server" RepeatColumns="2" Width="600px" Height="403px">
<ItemTemplate>
<table style="font-size: 10pt; height: 100px" border="0" cellpadding="0" cellspacing="0">
<tr>
<tr>
<td rowspan="6" style="width: 120px; height: 100px;">
<img alt="查看图片" id="image" src='<%#Eval("Images")%>' style="border: 0" width="100" />
</td>
<td style="width: 220px; height: 20px; text-align: left; font-size: 9pt; vertical-align: middle;">
客户名称:<%# Eval("UserName") %>
</td>
</tr>
<tr>
<td style="width: 220px; height: 20px; text-align: left; vertical-align: middle">
地址:<%# Eval("Province") %>省<%# Eval("city") %>市
</td>
</tr>
<tr>
<td style="width: 220px; height: 20px; text-align: left; vertical-align: middle">
QQ号码:<%# Eval("QQ") %>
</td>
</tr>
<tr>
<td style="width: 220px;">
昵称:<%# Eval("sex") %>
</td>
</tr>
<tr>
<td style="width: 220px;">
详细信息:<a href='xiang_xi.aspx?HenuID=<%#Eval("HenuID") %>'><%# Eval("UserName") %></a>
</td>
</tr>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
//点击详细信息跳转页面显示详细信息
//显示用户的详细信息
protected void bindUserInfo()
{
//编写SQL语句查询当前登录用户的详细信息
string sqlSel = "select * from tb_huen_lian where UserName='" + Session["UserName"].ToString() + "' and SuperAdmin='True'";//根据记录的图片名称和登录权限决定是否呈现图片信息;
//调用公共类中的getRow方法并接收返回的SqlDataReader对象
SqlDataReader sdr = operateData.getRow(sqlSel);
//读取一条数据
sdr.Read();
txtName.Text = sdr["UserName"].ToString();
txtMphone.Text = sdr["Mphone"].ToString();
//显示用户的QQ
txtQQ.Text = sdr["QQ"].ToString();
//获取图片路径
txtICQ.Text = sdr["ICQ"].ToString();
txtZhiYie.Text = sdr["ZhiYie"].ToString();
txtNickname.Text = sdr["nickName"].ToString();
imgpath = sdr["Images"].ToString();
//显示用户的图片
ImageHead.ImageUrl = imgpath;
txtShenGao.Text = sdr["ShenGao"].ToString();
txtshouru.Text = sdr["shouru"].ToString();
txtlname.Text = sdr["lname"].ToString();
txtwaimao.Text = sdr["waimao"].ToString();
txtxihao.Text = sdr["xihao"].ToString();
//显示用户的留言
sdr.Close();
}
#6
假定你的网站根目录是d:\web\,你把有权限验证的图片放在别的目录底下例如d:\pictures\,只要不是d:\web\目录及其子目录就行,这样通过浏览器是不可能直接访问到d:\pictures\目录中的文件的,然后你再单写一个读取图片的专用程序例如loadpic.ashx,通过<img src="loadpic.ashx?pic=aaa.jpg" />这样的方式进行引用 ,然后在loadpic.ashx里面先做权限检查,再去d:\pictures\目录底下找aaa.jpg文件,最后通过二进制方式输出aaa.jpg的内容就OK了
#7
先感谢大家的帮助!
httpmodule 拦截不到 images (可能iis 配置的问题)
http://www.cnblogs.com/hiearth/archive/2009/12/08/1619662.html
我和他的问题类似,最后他说在iis中的应用程序映射中没有对应.jpg,.png的扩展名,添加就可以了,我不清楚"添加"怎么做,是否可以在web.config中实现.
我不希望修改 src
我目前有个实现方法,就是通过web.config 写一个 url rewrite , 把图片访问 direct 到一个ashx 来做验证和输出。
还有什么好方案吗?
httpmodule 拦截不到 images (可能iis 配置的问题)
http://www.cnblogs.com/hiearth/archive/2009/12/08/1619662.html
我和他的问题类似,最后他说在iis中的应用程序映射中没有对应.jpg,.png的扩展名,添加就可以了,我不清楚"添加"怎么做,是否可以在web.config中实现.
我不希望修改 src
我目前有个实现方法,就是通过web.config 写一个 url rewrite , 把图片访问 direct 到一个ashx 来做验证和输出。
还有什么好方案吗?
#8
跟web.config没有关系
IIS6以上,在本地计算机右键属性->MIME设置里,能看到所有支持的扩展名,添加进去
#9
我无法直接控制计算机,只能通过web.config做设置。
还有方法吗?
还有方法吗?
#10
在web.config 中配置访问权限,例如:
这么设置只有,只有admin能访问,其他user都不能。也可以通过role 为一组人设置权限。
请查看: http://blog.itpub.net/12639172/viewspace-622138/
http://msdn.microsoft.com/zh-cn/library/8d82143t%28v=vs.85%29.aspx
<location path="UploadImage">
<system.web>
<authorization>
<deny users="?"/>
<allow users="admin"/>
</authorization>
</system.web>
</location>
这么设置只有,只有admin能访问,其他user都不能。也可以通过role 为一组人设置权限。
请查看: http://blog.itpub.net/12639172/viewspace-622138/
http://msdn.microsoft.com/zh-cn/library/8d82143t%28v=vs.85%29.aspx
#11
SPFarm 谢谢回复。
#12
httpmodule 可以拦截。
你在注册请求的后缀名必须经过你写的httpmodule 处理就可以拉
搜索一下 httpmodule 图片防盗 原理是相通的
你在注册请求的后缀名必须经过你写的httpmodule 处理就可以拉
搜索一下 httpmodule 图片防盗 原理是相通的
#13
http://www.cnblogs.com/RascallySnake/archive/2010/01/10/1643689.html
这一篇有点长,有点旧,不知道是否还能采纳。
高手帮我看一下。
iis 对静态文件是直接返回的,不会走程序,所以httpmodule拦截不到。
文中也说明只要在iis设定添加后缀就行了。和 #12 说的一样.
我开始就一直强调说明了这一点,我只能通过web.config去做配置。我无法直接进入server 设置iis .
所以能通过web.config 来设置添加 iis 对.jpg,.png 后缀处理吗?
这一篇有点长,有点旧,不知道是否还能采纳。
高手帮我看一下。
iis 对静态文件是直接返回的,不会走程序,所以httpmodule拦截不到。
文中也说明只要在iis设定添加后缀就行了。和 #12 说的一样.
我开始就一直强调说明了这一点,我只能通过web.config去做配置。我无法直接进入server 设置iis .
所以能通过web.config 来设置添加 iis 对.jpg,.png 后缀处理吗?
#14
可以用<hiddenSegments>配置节来实现拒绝对该目录下所有文件的访问权限,然后用自定义的httphandler来处理图片请求,参看过里:
http://www.iis.net/configreference/system.webserver/security/requestfiltering/hiddensegments
http://www.iis.net/configreference/system.webserver/security/requestfiltering/hiddensegments
#15
用了 #12 的方案
感谢大家的回复。问题解决了。
hosting 公司替我做了iis 设置。
依据#14,和我读到的一些 iis7的设置,似乎web.config 也可以设置得到。
感谢大家的回复。问题解决了。
hosting 公司替我做了iis 设置。
依据#14,和我读到的一些 iis7的设置,似乎web.config 也可以设置得到。