害怕你几乎被困在使用php.ini禁用其中的大部分。然而,情况变得更糟。 从技术上讲,它不是一个函数,它是一种语言结构,因此不能使用 禁用它。为此,您必须安装类似Suhosin的东西并从那里禁用它。eval()
disable_functions
一个好的网站站长应该认为安全审查是网站设置的重要组成部分。不要试图完全抽象出来,人们对安全性已经足够懒惰了。如果您要使用工具(如网络主机),则应主动至少对如何负责任地管理一个工具有粗略的了解。
也就是说,您还可以做一些其他事情来严重削弱大多数黑客尝试,包括:
-禁用使用 .现在,有办法解决这个问题,但是绝大多数黑客脚本本质上是通用的,这将破坏大约95%的脚本,因为它们需要同时存在这两个功能才能正常运行。这并不意味着您的服务器不会被黑客入侵,但在大多数情况下,它会产生手动嗅探服务器是否存在漏洞的开销,并且大多数黑客都在玩数字并且没有时间(注意:一些黑客确实有时间这样做,这本身并不是一颗灵丹妙药)。base64_decode()
disable_functions
-过滤所有输入,以查找常见的其他漏洞利用字符串模式,例如 ,它经常用于在不被注意的情况下通过开始的 php 标记发出吱吱声。有几种这样的模式。最佳做法是将特定字符列入白名单,并在每个输入的基础上拒绝所有其他字符。至少,过滤上述空终止符和可能的sql注入字符串,例如(不要假设简单地使用pdo或mysqli将过滤所有注入尝试,即使您正确使用预准备语句,仍然有一些方法可以做到这一点)。<?php
'; --
-任何仅为媒体提供服务的目录都应禁用所有脚本访问,并且所有上载和媒体应仅放在此类目录中。最好只将可接受的媒体列入白名单,而不是将脚本列入黑名单,因为有许多方法可以执行脚本文件(例如:,,,等),这些脚本文件在任何给定的服务器环境中可能单独可用,也可能不可用。您可以使用放置在媒体目录中的简单 .htaccess 来执行此操作,如下所示:php
php5
phtml
php_flag engine off
AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .aspx .htm .html .shtml .sh .cgi
Options -Indexes -ExecCGI
<Files "\.(jpe?g|png|gif|bmp|tiff|swf|flv|mov|avi|mp4)$">
order deny,allow
deny from all
</Files>
这部分可以由php动态编写,因此您的应用程序将能够以类似于此的方式保护敏感目录,这可以减轻黑客的大量痛苦,因为这通常被忽视。我通常会在上传目录中工作的几乎每个Wordpress站点中添加类似的.htaccess,并且经常想知道为什么这不是开箱即用的,因为它阻止了大量的黑客尝试,并且不会以任何方式干扰我注意到的应用程序。
不幸的是,如果您不在apache服务器上,则需要找到另一种解决方案(在IIS上很可能有一个等效的解决方案,但我个人不知道它会是什么)。
-您还应该配置.htaccess(或web.config/etc)以禁用特定应用程序不需要的任何访问方法。如果你没有做RESTful Web服务,真的没有理由允许或,你几乎肯定也应该禁用,并且可能也没有任何理由离开或启用。还应该提到的是,默认情况下,所有无法识别的连接方法都解析为 ,这意味着从命令行我可以执行如下操作:PUT
DELETE
TRACE
OPTIONS
HEAD
GET
curl -X BOOGITY -d arg=badstuff -d arg2=morebadstuff yoursite.com
在此示例中,是没有意义的,但是,您的服务器会将其解释为:BOOGITY
curl -X GET -d arg=badstuff -d arg2=morebadstuff yoursite.com
但是,您的应用程序可能不会。为了防止出现这种情况,应将服务器配置为仅接受 为 ,而不允许其为默认值。GET
GET
在大多数情况下,主要不是使在您的环境中执行特定的php模式变得困难,重点是防止包含流氓代码(本地或外部),因此它不会成为问题。如果您允许在CMS中安装模块或类似内容,那么草率的程序员最终会创建漏洞利用程序,除了强制执行非常严格的API参数之外,您无法真正做到这一点,这些参数使得它很难做到很糟糕,但它永远不会变得不可能。永远不要低估离岸黑客商店或自称“php ninja”的能力,以最不安全或不合规的方式勤奋地使用您的系统,创建巨大的漏洞,并发明任意数量的迂回黑客来做到这一点,实际上比以正确的方式完成更难实现。
/安全咆哮。