http://www.php.net/manual/zh/security.hiding.php
隐藏 PHP
一般而言,通过隐藏的手段提高安全性被认为是作用不大的做法。但某些情况下,尽可能的多增加一份安全性都是值得的。
一些简单的方法可以帮助隐藏 PHP,这样做可以提高攻击者发现系统弱点的难度。在 php.ini 文件里设置 expose_php = off ,可以减少他们能获得的有用信息。
另一个策略就是让 web 服务器用 PHP 解析不同扩展名。无论是通过 .htaccess 文件还是 Apache 的配置文件,都可以设置能误导攻击者的文件扩展名:
Example#1 把 PHP 隐藏为另一种语言
# 使PHP看上去像其它的编程语言 AddType application/x-httpd-php .asp .py .pl
Example#2 使用未知的扩展名作为 PHP 的扩展名
# 使 PHP 看上去像未知的文件类型 AddType application/x-httpd-php .bop .foo .133t
Example#3 用 HTML 做 PHP 的文件后缀
# 使 PHP 代码看上去像 HTML 页面 AddType application/x-httpd-php .htm .html
RewriteRule ^$ /index.php [L]
RewriteRule ^([a-zA-Z0-9\-\_/]*)/$ /$1/index.php [L]
RewriteRule ^([a-zA-Z0-9\-\_/]*)\.(html|htm)$ /$1.php [L]
RewriteRule ^([a-zA-Z0-9\-\_/]*)$ /$1.php [L]
echo "<BR>";
// PARSING QUERY STRING
$QS=explode("&",$_SERVER['QUERY_STRING']);
echo $QS[0];
echo "<BR>";
$QS=explode('/',$QS[0]);
if (!$QS[0]) $MODUL='index';
else $MODUL=strtolower($QS[0]);
// for alternative _GET
for ($i=1;$i<count($QS);$i+=2)
{
$_QUERY[$NVAR]=$NVAR=$QS[$i];
$$NVAR=$QS[$i+1];
}
// Check the Modul is exists?
if (!file_exists("modul_directory/{$MODUL}.php"))
$MODUL="index";
// Load The Template
//include("template.php");
// Load The Module
//include("modul_directory/{$MODUL}.php");
// Load The Footer
//include("footer.php");
foreach ($_GET as $varname => $varvalue) {
if (empty($varvalue)) {
$empty[$varname] = $varvalue;
} else {
$post[$varname] = $varvalue;
}
}
if (empty($empty)) {
print "None of the POSTed values are empty, posted:\n";
var_dump($post);
} else {
print "We have " . count($empty) . " empty values\n";
print "Posted:\n"; var_dump($post);
print "Empty:\n"; var_dump($empty);
exit;
}
=================================
- it mean load the modul forum.php, and set the _QUERY['topic']=20
- it mean load the modul voting.php, and set the _QUERY['id']=54 and _QUERY['type']='piechart' and set _GET['choice']=2
RewriteRule ^([^.?]+)$ %{REQUEST_URI}.php [L]
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$"
RewriteRule .* - [L,R=404]
# RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$" [NC]
28-Oct-2003 12:17
adding MultiViews to your apache Options config
lets you hide/omit .php in the url without any rewriting, etc...
有可能使 PHP 运作于 Apache 的 content negotiation(MultiViews 选项)吗?
如果到 PHP 文件的连接包含扩展名,一切都运行完美。本解答只针对到 PHP 文件的连接不包含扩展名时,而希望通过 content negotiation 来从不包含扩展名的 URL 来选择 PHP 文件的情况。在此种情况下,将 AddType application/x-httpd-php .php 替换为:
# PHP 4 AddHandler php-script php AddType text/html php # PHP 5 AddHandler php5-script php AddType text/html php
http://archive.apache.org/dist/httpd/old/Top
windowsd版本
http://archive.apache.org/dist/httpd/binaries/win32/old/
linux版本
http://archive.apache.org/dist/httpd/binaries/linux/
--EOF--
Leave a comment