0

我正在修改一个 .aspx 页面,该页面使用一些 javascript 来下载基于此标记中的 value 属性的文件:

<input type="hidden" id="launchDocument" value="pdf/<%=Settings.LaunchDocument%>" >

该值当前被硬编码到 Web.config 文件中。客户希望此页面现在成为其存档时事通讯的下载页面。我的想法是让页面从查询字符串中提取文件名,以便发送页面可以定义正在下载的文件:

<input type="hidden" id="launchDocument" value="../pdf/<%=Request.QueryString["filename"]%>" />

但是,我担心这种方法是否存在任何安全风险。如果有,在将查询字符串添加到页面之前检查查询字符串的值以确保它是有效的 .pdf 文件名的最佳做法是什么?

提前感谢您的帮助!

4

4 回答 4

3

为什么实际的文件名需要在那里?创建一个将文件名与 guid 相关联的表并传递它。

当需要下载时,转移到加载并返回文件的脚本。

于 2011-04-21T13:40:43.317 回答
0
  1. 不要在<input>现场使用文件扩展名
  2. 始终将 .PDF 附加到输入提供的路径。
  3. 将相对路径展开为绝对路径。
  4. 验证绝对路径(检查它是否在 PDF 下载目录中)
于 2011-04-21T13:33:02.540 回答
0

您可以创建一个 HTTP 处理程序来监视这些请求,并在处理程序中检查文件是否存在,以及它是否没有重定向到适当的错误页面......

于 2011-04-21T13:17:00.223 回答
0

使用论坛搜索,您会发现:

C# 中用于文件名验证的正则表达式

于 2011-04-21T13:17:04.880 回答