文件上传的路径安全问题

作者:vkvi 来源:ITPOW(原创) 日期: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,则取得的是不带路径的文件名,不存在此安全问题。

相关文章