2010-09-13 57 views
4

如何防止通过浏览器“非法”下载php文件。有什么方法可以用来下载php文件?如何防止下载PHP文件?什么是某些人可以下载它们的方式?

+0

你究竟是什么意思?你的意思是所需文件的PHP源代码?在正确配置的浏览器上,这不会发生。 – 2010-09-13 18:57:24

+2

@Pekka:它肯定不是一个需要进行适当配置,以防止... – 2010-09-13 19:01:36

+0

有人告诉我,文件可以通过浏览器下载... – AAA 2010-09-13 19:02:12

回答

12

你真的不能被下载,如果您的应用程序是不安全避免文件。下面的例子允许恶意用户可以查看服务器上的任何文件:

<?php 
readfile($_GET['file']); 
?> 

如果你想防止Apache暴露源代码,如果事情是错用PHP,在httpd.conf /的.htaccess添加此:

# In case there is no PHP, deny access to php files (for safety) 
<IfModule !php5_module> 
    <FilesMatch "\.(php|phtml)$"> 
     Order allow,deny 
     Deny from all 
    </FilesMatch> 
</IfModule> 
# the following should be added if you want to parse .php and .phtml file as PHP 
# .phps will add syntax highlighting to the file when requesting it with a browser 
<IfModule php5_module> 
    AddType text/html .php .phtml .phps 
    AddHandler application/x-httpd-php .php .phtml 
    AddHandler application/x-httpd-php-source .phps 
</IfModule> 
+0

感谢您的回复。我如何将这个包含在php文件中,只需要以同样的方式复制和粘贴,或者我还需要做其他的事情?换句话说,你说的是,如果服务器是安全的,不管没有人可以下载文件。 – AAA 2010-09-13 19:01:53

+0

@AAA:这与PHP脚本本身无关。它属于你的apache配置。 – jwueller 2010-09-13 19:03:59

+2

@AAA放松。机会是没有问题的。每个配置为解析PHP文件的普通服务器都不会让人们下载PHP源代码。 – 2010-09-13 19:05:49

9

在正常情况下,没有人能够下载PHP源代码,因为它是在服务器上执行。 Web服务器识别PHP脚本并将它们传递给PHP。然后将结果传回给请求用户的浏览器。你所描述的情况只能在Web服务器配置真正混乱的情况下才能实现。

+0

如果我还有选票,会+1,这可能是所有事情都可以说的,根本没有问题 – 2010-09-13 19:06:55

+0

“正常情况下” - 一个额外的[安全警卫](http://en.wikipedia.org/ wiki/Defense_in_depth_(计算))总是有用的,以防万一出现错误。(一辆汽车不应该碰撞,但如果发生碰撞,驾驶员将会有安全带和气囊保护他) – Lekensteyn 2010-09-14 14:59:56

+0

@Lekensteyn:你说得对。正如我在问题的评论中所说的,我非常喜欢你的解决方案。 – jwueller 2010-09-14 15:37:36

2
<?php 
header('Content-disposition: attachment; filename=http://www.victim.com/phpfile.php'); 
header('Content-type: application/pdf'); 
readfile('http://www.victim.com/phpfile.php'); 
?> 
1

在正常情况下,没有人能够下载PHP源代码(同其他答案),但是,如果你有一个不同的扩展示例文件:page1.bak,你有一个page1.php,page.bak被下载,如果你只是把URL ht ..//.../页面1

我已经通过PHP 5.3.10-1ubuntu3.2和Apache/2.2.22 确认了这一点。总之,避免将您的配置或测试文件放入生产目录,除非您希望它们以原始状态下载。

期权多视角也应在apache2.conf禁用或httpd.conf来避免违约久违“近状”的文件名。

0

你永远不会从Web服务器上运行PHP下载PHP文件。你可以在这个答案中下载从PHP提供的HTML。你不会得到PHP脚本你得到的HTML + JavaScript(如果有的话)

<?php 
header('Content-disposition: attachment; 
filename=http://www.victim.com/phpfile.php'); 
header('Content-type: application/pdf'); 
readfile('http://www.victim.com/phpfile.php'); 
?>