隐藏PHP

一般来说,默默无闻的安全是最薄弱的安全形式之一。但在某些情况下,每一点额外的安全性都是可取的。

一些简单的技巧可以帮助隐藏菲律宾比索,可能会变慢击倒一个试图发现你的弱点的攻击者系统。通过将expose_php设置为远离的在您的php.ini公司文件,您可以减少他们可用的信息量。

另一种策略是将诸如apache之类的web服务器配置为通过解析不同的文件类型菲律宾比索,或者使用.hta访问指令,或在apache配置文件本身中。你可以然后使用具有误导性的文件扩展名:

示例#1将PHP隐藏为另一种语言

#使PHP代码看起来像其他代码类型AddType应用程序/x-httpd-php.asp.py.pl
或者完全掩盖它:

示例#2对PHP扩展使用未知类型

#使PHP代码看起来像未知类型AddType应用程序/x-httpd-php.bop.foo.133t
或将其隐藏为HTML格式代码,性能略有下降,因为全部的HTML格式将通过菲律宾比索发动机:

示例#3使用HTML格式PHP扩展的类型

#使所有PHP代码看起来像HTMLAddType应用程序/x-httpd-php.htm.html
为了有效地工作,必须重命名菲律宾比索带有的文件上述扩展。虽然它是一种通过默默无闻,这是一个小的预防措施,几乎没有缺点。

添加注释

用户贡献的笔记26条注释

Sajith Karunatilake公司@
1年前
如果代码本身有缺陷,那么仅仅隐藏它看起来并不是很好的“安全性”。最后,不管其文件扩展名是什么,代码都必须运行。这可能有一些好处。但这并不能阻止某些人(不是脚本小鬼或某种自动机器人)利用代码中的缺陷。

只是一个想法。

留下这条评论只是为了防止初学者将其用作合法的安全措施(假设他们阅读了文档)。不过功能很酷。
谷歌邮箱的rustamabd
17年前
到目前为止,我还没有看到将/foo/bar重写为/foo/bar.php的有效程序,所以我创建了自己的。它在顶级目录AND子目录中工作,不需要硬编码RewriteBase。

.ht访问:

RewriteEngine打开

#将/foo/bar重写为/foo/bar.php
重写规则^([^.?]+)$%{REQUEST_URI}.php[L]

#如果原始请求是/foo/bar.php,则返回404
重写代码%{THE_REQUEST}“^[^]*.*?\.php[?].*$”
重写规则.*-[L,R=404]

#注意!对于WINDOWS上的APACHE:将[NC]添加到RewriteCond,如下所示:
#重写代码%{THE_REQUEST}“^[^]*.*?\.php[?].*$”[NC]
anon at示例dot-com
10年前
会话名称默认为PHPSESSID。这被用作发送到用户的web浏览器/客户端的会话cookie的名称。(例如:PHPSESSID=kqjqper294faui343o98ts8k77)。

要隐藏这一点,请在调用session_start()之前调用session(),并将$name参数设置为通用名称。例子:

session_name(“id”);
session_start();

干杯。
gmail网站的sandaimespaceman
15年前
将INI指令“expose_php”设置为“off”也会有所帮助。
您可以将PHP欺骗到ASP。NET,使用:
<?php(电话)
错误_报告
(0);
收割台(“X-Powered-By:ASP.NET”);
?>
NOSPAM dot gmail dot com上的marpetr
18年前
我认为在Apache和Apache本身上隐藏PHP的最佳方法是:

httpd.conf网址
-------------
# ...
#最小化“服务器”标头信息
服务器令牌产品
#在服务器生成的页面上禁用服务器签名
服务器签名关闭
# ...
#将默认文件类型设置为PHP
默认类型应用程序/x-httpd-php
# ...

php.ini公司
------------
; ...
expose_php=关闭
; ...

现在URL将如下所示:
http://my.server.com/forums/post?forumid=15

现在,黑客只知道您正在使用Apache。
毫米j
20年前
您可以通过在URL末尾添加以下内容来查看是否有人在使用PHP:
?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
如果页面使用PHP,则会显示PHP学分。

在php.ini中将expose_php设置为Off可防止出现这种情况。
匿名
21年前
PS.如果您想使用漂亮的URL(即隐藏.php扩展名)并且启用了safe-mode=,那么前面的示例(ForceType)将不适用于您。问题是,safe-mode强制Apache接受请求URL中的尾随字符。这意味着:

http://www.example.com/home网站

仍将由我们的文档根目录中的主脚本处理,但用于:

http://www.example.com/home/contact_us.html

apache实际上会在我们的文档根目录中查找/home/contactus.html文件。

我发现的最佳解决方案是设置一个虚拟主机(我对所有内容都这么做,甚至是默认的文档根),并覆盖虚拟主机中的尾随字符处理。因此,对于侦听端口8080的虚拟主机,apache指令如下所示:

<VirtualHost*:8080>
DocumentRoot/web/doc_root
别名/home“/web/doc_root/home.php”
启用AcceptPathInfo
</VirtualHost>

有些人可能会问,为什么我们要覆盖尾随字符处理(使用AcceptPathInfo指令),而不是仅仅关闭safe-mode=off。原因是,安全模式设置了整个服务器的全局限制,然后可以为每个特定的虚拟主机打开或关闭这些限制。这相当于阻止防火墙上的所有连接,然后只打开您想要的连接,这比让所有连接都全局打开要安全得多,并且假设您的程序员永远不会忽视可能的安全漏洞。
派奥奈德
15年前
在PHP中隐藏X-Powered-By的想法是建立安全性的一种有缺陷的尝试。正如手册所指出的那样,模糊不是安全。如果我在利用一个站点,我不会检查该站点运行的脚本语言,因为对我来说最重要的是利用它。隐藏你使用[x]语言的事实并不会阻止我绕过较差的安全性。
本杰明在sonntag dot fr
19年前
为了响应前面的消息,对于apache,有一种更简单的方法可以设置不带“.”的文件,让PHP执行,只需将其放在“.htaccess”文件中即可:

DefaultType应用程序/x-httpd-php
CD001号
13年前
无论如何,“隐藏”PHP是一个好主意,这样您就可以编写RESTful web应用程序。

使用Apache Mod重写:

RewriteEngine开
重写规则^control/([^/]+)/(.*)$sitecontroller.php?控制=$1&查询=$2

然后使用如下函数从$_GET超全局检索数据(以零索引方式)。

<?php(电话)
功能我的GET() {
$a获取=数组();

如果(isset(
$_GET(获取)['查询'])) {
$a获取=爆炸('/',$_设置['查询']);
}

返回
$a获取;
}
?>

当然,这只是一个非常基本的例子——你可以用Mod Rewrite和一个自定义的“GET”函数做很多事情。
frinteractives网站上的信息
8年前
试试这个
RewriteEngine开

#除非是目录,否则删除尾部斜杠
重写代码%{REQUEST_FILENAME}-d日
重写规则^([^/]+)/$http://example.com/folder/$1[R=301,L]

#将外部.php请求重定向到无扩展url
重写代码%{THE_REQUEST}^(.+)\.php([#?][^\]*)?\HTTP协议/
重写规则^(.+)\.php$http://example.com/folder/$1[R=301,L]

#解析无扩展php URL的.php文件
重写规则^([^/.]+)$$1.php[L]
yasuo_ohgaki在雅虎网站
22年前
要隐藏PHP,需要遵循PHP.ini设置

expose_php=关闭
display_errors=关闭

和httpd.conf

服务器签名关闭
(min很管用,但我更喜欢关闭)
在qualysNOSPAM网站发送电子邮件
20年前
将多视图添加到apache选项配置
允许您在url中隐藏/省略.php,而无需进行任何重写等。。。
jtw90210型
18年前
为了使PATH_INFO正常工作,以便在较新版本的PHP中使用隐藏程序/尾部斜杠/“漂亮url”传递参数,必须在httpd.conf中添加“AcceptPathInfo On”。

AddType应用程序/x-httpd-php.php.html
AcceptPathInfo打开

用你的phpinfo页面试试,你就能搜索PATH_INFO了。

http://example.com/myphpinfo.php/showmethway

如果要删除.php,请使用以下其中一个或两个选项:
DefaultType应用程序/x-httpd-php
ForceType应用程序/x-httpd-php
匿名
20年前
请记住,如果你真的对隐藏PHP感到震惊,GD会揭发你。

继续——用GD制作一个图像,然后用文本编辑器打开。。在那里的某个地方,你会看到到处都是带有gd&php的注释。
m1tk4在hotmail网站
21年前
我通常会:

<代码>
启用重写引擎
重写选项继承<br>
重写规则(.*)\.htm[l]?(.*)$1.php$2[nocase]<br>
</code>

在.htaccess中。您需要为此安装mod_rewrite。
istvan dot takacsNOSPAM at hungax dot com网站
22年前
并使用
服务器令牌最小值
httpd.conf中的指令隐藏apache中已安装的PHP模块。
liquefyr网站上的l0rdphi1
20年前
更有趣的是包括没有文件扩展名的文件。

只需将ForceType应用程序/x-httpd-php位添加到Apache.htaccess即可。

哦,是的,当你玩像下面这样的东西时,它会变得更好:

<?php(电话)
子(substr)
($服务器(_S)['路径信息'],1);
?>

例如www.example.com/somepage/55

并且:

<?php(电话)
foreach公司(爆炸('/',$服务器(_S)['路径信息'])作为$对) {
列表(
$密钥,价值$)=分裂('=',$对,2);
$参数[$键] =条斜线(价值$);
}
?>

例如www.example.com/somepage/param1=value1/param2=value2/etc=etc

享受=)
布莱斯·内斯比特(Bryce Nesbitt)。组件对象模型
21年前
对所有脚本使用.php扩展名是没有必要的,事实上可能有害(因为暴露了太多关于服务器的信息,并且限制了将来在不中断链接的情况下可以做的事情)。有几种方法可以隐藏.php脚本扩展名:

(1) 不要硬编码文件类型。不要指定任何点,大多数web服务器都会自动找到您的.php、.html、.pdf、.gif或其他匹配文件。这称为标准URL格式:
www.xxxxxx.com/page(网址)
www.xxxxxx.com/目录/
这为您在将来改变主意提供了很大的灵活性,并防止Windows浏览器对文件类型做出不正确的假设。

(2) 在Apache.htaccess文件中使用:
RewriteEngine打开
重写规则页面.html页面.php

(3) 强制Web服务器将所有.html文件解释为.php:
AddType应用程序/x-httpd-php.php3.php.html
用户点网上的php
20年前
在.htaccess文件中如何处理:

RewriteEngine打开
重写规则^$/index.php[L]
重写规则^([a-zA-Z0-9\-\_/]*)/$/$1/index.php[L]
重写规则^([a-zA-Z0-9\-\_/]*)\。(html|htm)$/$1.php[L]
重写规则^([a-zA-Z0-9\-\_/]*)$/$1.php[L]

如果'anything'是一个目录,则键入“sub.domain.foo/anything”loads“/anythone/index.php”,否则将加载“/anothing.php”。

我相信你能找到更好的mutch,但它在我的网站上运行得很好:)
英国碳排放设计公司的西蒙
17年前
我在.htaccess文档中使用了以下内容

<IfModule mod_rewrite.c>
RewriteEngine开
重写基础/
重写代码%{REQUEST_FILENAME}-(f)
重写代码%{REQUEST_FILENAME}-d日
重写规则/索引.php[L]
</If模块>

然后是下面的简单代码

<?php(电话)

$永久链接
=爆炸("/",$服务器(_S)[“请求URI”]);

$瓦隆=$永久链接[1];
$vartwo美元=$永久链接[2];

...

?>
vfmedia网站上的php
19年前
我?我们找到了一种隐藏php代码的简单方法,并且uri可由谷歌和其他人搜索。。。(仅适用于unix或linux)

起初,我在hide.conf中有一些规则(我为它做了一个额外的.conf(apache 2.0))

例如,当我想屏蔽index.php

<文件索引>
ForceType应用程序/x-httpd-php
</文件>

我的问题是,我的代码应该是可读的。。。

所以我制作了一个额外的文件夹,例如srv/www/htdocs/static_output

我的phpcode在include文件夹中。。。。(例如,mnt/source/index.php)

然后我在shell中创建了一个链接>ln-mnt/source/index.php srv/www/htdocs/static_output/index

因此,代码在我的includefolder中是可读的(带有.php扩展名),并且只有srv文件夹中的链接没有扩展名(由浏览器调用……)。
gmail网站上的omolewastephen
6年前
我在我的网站上使用了这个,它对我很有用

#RewriteEngine打开

#将/foo/bar重写为/foo/bar.php
#重写规则^([^.?]+)$%{REQUEST_URI}.php[L]

#如果原始请求是/foo/bar.php,则返回404
#重写代码%{THE_REQUEST}“^[^]*.*?\.php[?].*$”
#重写规则.*-[L,R=404]

#注意!对于WINDOWS上的APACHE:将[NC]添加到RewriteCond,如下所示:
#重写代码%{THE_REQUEST}“^[^]*.*?\.php[?].*$”[NC]
赖安
12年前
另一种隐藏php的方法是完全删除扩展,如下所示:

选项+关注Symlinks
RewriteEngine开
重写基础/
重写代码%{REQUEST_FILENAME}-(f)
重写代码%{REQUEST_FILENAME}-d日
重写命令%{REQUEST_FILENAME}.php-f
重写规则^(.+)$/$1.php[L,QSA]

希望这有帮助!
panix dot com上的某物
21年前
另一方面,如果您运行的是
PHP/Apache不知道是否有可利用的漏洞(通常是当时最新的稳定版本),如果攻击者看到了这一点,他们可能会在尝试之前就放弃。如果他们不这样做,他们可能会继续尝试利用漏洞。

这实际上取决于攻击者的类型。受过教育的安全咨询阅读攻击者在街上与脚本小童对抗。

如果您一直在使用补丁程序,那么版本公开对您来说应该不是问题。
拉兹
16年前
可能有些服务器不允许您放置此行(即不起作用)

AddType应用程序/x-httpd-php.asp.py.pl

DefaultType应用程序/x-httpd-php

因此,另一种真正好的方法是:

1-在.htaccess文件中写入:

RewriteEngine打开
重写Base/dire/或just/
重写规则安全名称yourfile\.php[T=application/x-httpd-php]

示例:所有类似url的
www.example.com/securename解析为
www.example.com/yourfile.php

2-但这里$_GET不起作用,但$_POST起作用,因此对于动态页面,如
www.example.com/yourfile.php?page=1您使用
www.example.com/securename?页码=1

now:而不是使用$_GET
<?php(电话)
$uri(美元)
=$服务器(_S)['请求(_URI)'];
$页=字符串查找($uri(美元),'=');
$页=子(substr)($页,1);
$valid_pages(有效页面)=数组('1','2','...');
$页=阵列中(_A)($页,$valid_pages(有效页面))?$页:'1';
//....
?>

对于错误的URL,您可以将此代码添加到.htaccess文件中
在.htaccess中的第一个代码下面是粗糙的
#--
重写代码%{REQUEST_FILENAME}-(f)
重写代码%{REQUEST_FILENAME}-d日
重写规则^*$http://www.example.com/securename【L】
到顶部