如果代码本身有缺陷,那么仅仅隐藏它看起来并不是很好的“安全性”。 最后,不管其文件扩展名是什么,代码都必须运行。 这可能有一些好处。 但这并不能阻止某些人(不是脚本小鬼或某种自动机器人)利用代码中的缺陷。
只是一个想法。
留下这条评论只是为了防止初学者将其用作合法的安全措施(假设他们阅读了文档)。 不过功能很酷。
#使PHP代码看起来像其他代码类型 AddType应用程序/x-httpd-php.asp.py.pl
#使PHP代码看起来像未知类型 AddType应用程序/x-httpd-php.bop.foo.133t
#使所有PHP代码看起来像HTML AddType应用程序/x-httpd-php.htm.html
如果代码本身有缺陷,那么仅仅隐藏它看起来并不是很好的“安全性”。 最后,不管其文件扩展名是什么,代码都必须运行。 这可能有一些好处。 但这并不能阻止某些人(不是脚本小鬼或某种自动机器人)利用代码中的缺陷。
只是一个想法。
留下这条评论只是为了防止初学者将其用作合法的安全措施(假设他们阅读了文档)。 不过功能很酷。
到目前为止,我还没有看到将/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]
会话名称默认为PHPSESSID。 这被用作发送到用户的web浏览器/客户端的会话cookie的名称。 (例如:PHPSESSID=kqjqper294faui343o98ts8k77)。
要隐藏这一点,请在调用session_start()之前调用session(),并将$name参数设置为通用名称。 例子:
session_name(“id”);
session_start();
干杯。
将INI指令“expose_php”设置为“off”也会有所帮助。
您可以将PHP欺骗到ASP。 NET,使用:
<? php(电话)
错误_报告 ( 0 );
收割台 ( “X-Powered-By:ASP.NET” );
?>
我认为在Apache和Apache本身上隐藏PHP的最佳方法是:
httpd.conf网址
-------------
# ...
#最小化“服务器”标头信息
服务器令牌产品
#在服务器生成的页面上禁用服务器签名
服务器签名关闭
# ...
#将默认文件类型设置为PHP
默认类型应用程序/x-httpd-php
# ...
php.ini公司
------------
; ...
expose_php=关闭
; ...
现在URL将如下所示:
http://my.server.com/forums/post?forumid=15
现在,黑客只知道您正在使用Apache。
您可以通过在URL末尾添加以下内容来查看是否有人在使用PHP:
?= PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
如果页面使用PHP,则会显示PHP学分。
在php.ini中将expose_php设置为Off可防止出现这种情况。
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。原因是,安全模式设置了整个服务器的全局限制,然后可以为每个特定的虚拟主机打开或关闭这些限制。 这相当于阻止防火墙上的所有连接,然后只打开您想要的连接,这比让所有连接都全局打开要安全得多,并且假设您的程序员永远不会忽视可能的安全漏洞。
在PHP中隐藏X-Powered-By的想法是建立安全性的一种有缺陷的尝试。 正如手册所指出的那样,模糊不是安全。 如果我在利用一个站点,我不会检查该站点运行的脚本语言,因为对我来说最重要的是利用它。隐藏你使用[x]语言的事实并不会阻止我绕过较差的安全性。
为了响应前面的消息,对于apache,有一种更简单的方法可以设置不带“.”的文件,让PHP执行,只需将其放在“.htaccess”文件中即可:
DefaultType应用程序/x-httpd-php
无论如何,“隐藏”PHP是一个好主意,这样您就可以编写RESTful web应用程序。
使用Apache Mod重写:
RewriteEngine开
重写规则^control/([^/]+)/(.*)$sitecontroller.php? 控制=$1&查询=$2
然后使用如下函数从$_GET超全局检索数据(以零索引方式)。
<? php(电话)
功能 我的GET () {
$a获取 =数组();
如果(isset( $_GET(获取) [ '查询' ])) {
$a获取 = 爆炸 ( '/' , $_设置 [ '查询' ]);
}
返回 $a获取 ;
}
?>
当然,这只是一个非常基本的例子——你可以用Mod Rewrite和一个自定义的“GET”函数做很多事情。
试试这个
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]
要隐藏PHP,需要遵循PHP.ini设置
expose_php=关闭
display_errors=关闭
和httpd.conf
服务器签名关闭
(min很管用,但我更喜欢关闭)
为了使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
我通常会:
<代码>
启用重写引擎
重写选项继承<br>
重写规则(.*)\.htm[l]? (.*)$1.php$2[nocase]<br>
</code>
在.htaccess中。 您需要为此安装mod_rewrite。
更有趣的是包括没有文件扩展名的文件。
只需将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
享受=)
对所有脚本使用.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
在.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,但它在我的网站上运行得很好:)
我在.htaccess文档中使用了以下内容
<IfModule mod_rewrite.c>
RewriteEngine开
重写基础/
重写代码%{REQUEST_FILENAME}- (f)
重写代码%{REQUEST_FILENAME}- d日
重写规则/ 索引.php[L]
</If模块>
然后是下面的简单代码
<? php(电话)
$永久链接 = 爆炸 ( "/" , $服务器(_S) [ “请求URI” ]);
$瓦隆 = $永久链接 [ 1 ];
$vartwo美元 = $永久链接 [ 2 ];
...
?>
我? 我们找到了一种隐藏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文件夹中的链接没有扩展名(由浏览器调用……)。
我在我的网站上使用了这个,它对我很有用
#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]
另一种隐藏php的方法是完全删除扩展,如下所示:
选项+关注Symlinks
RewriteEngine开
重写基础/
重写代码%{REQUEST_FILENAME}- (f)
重写代码%{REQUEST_FILENAME}- d日
重写命令%{REQUEST_FILENAME}.php-f
重写规则^(.+)$/$1.php[L,QSA]
希望这有帮助!
另一方面,如果您运行的是
PHP/Apache不知道是否有可利用的漏洞(通常是当时最新的稳定版本),如果攻击者看到了这一点,他们可能会在尝试之前就放弃。 如果他们不这样做,他们可能会继续尝试利用漏洞。
这实际上取决于攻击者的类型。 受过教育的安全咨询阅读攻击者在街上与脚本小童对抗。
如果您一直在使用补丁程序,那么版本公开对您来说应该不是问题。
可能有些服务器不允许您放置此行(即不起作用)
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】