正在加载 Google 自定义搜索...

时代互联|域名注册|虚拟主机|主机|企业邮箱|服务器租用|短信平台 CNNIC金牌注册服务机构,ICANN认证的顶级域名注册商,微软SPLA认证运营商

文件上传的路径安全问题

作者:vkvi 来源:千一网络(原创) 时间:2007-11-28

在 ASP 中,获取上传文件名称需要注意“/”与“\”。

D:\dir1\dir2\../file.txt

如果在上传文件框中输入以上内容,上传的实际文件就是 D:\dir1\file.txt。

但取得的文件名是 D:\dir1\dir2\../file.txt,如果按“\”来作文件分隔,那么不带路径的文件名为“../file.txt”,如果直接按该文件名保存,由于“../”的问题,就会将文件保存于不期望的地方。解决办法是判断“/”与“\”谁在最后。

在 ASP.NET 中上传文件非常方便,但上述问题依然存在。

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    protected void btn_Click(object sender, EventArgs e)
    {
        info.Text = (upload.PostedFile.FileName);
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>FileUpload</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:FileUpload ID="upload" runat="server" />
    <asp:Button ID="btn" runat="server" Text="上传" OnClick="btn_Click" />
    <asp:Label ID="info" runat="server"></asp:Label>
    </div>
    </form>
</body>
</html>

为什么呢,因为 ASP.NET 服务器端并未对文件名作处理。而文件名是客户端提交上来的,也就是说这受客户端的限制,如果客户端是 Firefox,则取得的是不带路径的文件名,不存在此安全问题。

订阅千一,精彩随你。

  • 订阅到 Google
  • 订阅到 QQ 邮箱
  • 订阅到有道
  • 订阅到雅虎
  • 订阅到鲜果
  • 订阅到抓虾
  • 订阅到哪吒
  • 订阅到九点
  • 订阅到 bloglines
  • 订阅到 newsgator
文章评论
标题:必填
内容:
请您投票

给文章打分,表达您的观点。

ezj 轻松、快捷的 JavaScript 框架
配置 IIS 6、IIS 7 中的 ASP.NET 虚拟主机