如何防止用户使用我的Web应用程序中用于下载pdf文件的PHP下载选项下载源代码文件?

时间:2018-08-28 14:12:45

标签: php security extjs

Download.php

create_engine

以下是我用来将URL传递给php脚本的JavaScript代码: Download.js

<?php 
$file = $_GET['file'];
if(file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>

如果我在url中输入“ Download.php?file = .. / web.config”,则正在下载web.config文件。我想防止直接下载源代码。下载选项用于下载我存储在主目录中pdf文件夹中的pdf文件。

请帮忙!

2 个答案:

答案 0 :(得分:1)

您在这里犯了一个非常糟糕的设计决定,使您vulnerable to file system traversal

您可能会考虑:

  1. 确保所请求的文件以.pdf结尾
  2. 确保正在读取的文件以.pdf结尾
  3. 删除文件参数包含..的所有请求

鉴于Download.php根本不希望确保请求者已通过身份验证,我建议您也许将您的PDF文档保存在可访问网络的目录中,并直接链接到它们,而不是创建可能造成危害的攻击媒介您的服务器。

答案 1 :(得分:0)

在web.config中使用它,

<authorization>
    <allow users="user1, user2"/>
    <deny users=”?”/>
</authorization>

https://support.microsoft.com/en-us/help/815151/how-to-restrict-specific-users-from-gaining-access-to-specified-web-re

就像迈克尔M所说的那样,不允许代码规避这一点。