安全性:阻止直接访问php文件

时间:2016-01-15 作者:mrtnmgs

我找到了两种阻止直接访问php文件的方法(虽然并不总是必要的,请参见https://wordpress.stackexchange.com/a/63004/60539)第一个是:

defined( \'ABSPATH\' ) or die( \'No script kiddies please!\' );
另一方面:

if ( ! empty( $_SERVER[\'SCRIPT_FILENAME\'] ) && basename( __FILE__ ) == basename( $_SERVER[\'SCRIPT_FILENAME\'] ) ) {
    die ( \'You do not have sufficient permissions to access this page!\' );
}
他们在做同样的事情吗?我要一个胜过另一个吗?

2 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

在我看来only 做到这一点的方法(在WordPress的上下文中)是:

if ( ! defined( \'ABSPATH\' ) ) // Or some other WordPress constant
     exit;
第二种技术很模糊,并且提供了相同的检查级别(它只检查主PHP文件的文件名是否与自身匹配,而不检查WordPress是否已加载,也不检查它是否是另一个同名文件)。

还有这个No script kiddies please! 是没有意义的,我希望这股潮流会消失——只是静静地退出。

SO网友:Mark Kaplun

第一个的逻辑基于wordpress设置ABSPATH 作为初始化的一部分,因此,如果未设置,则不能通过“官方”wordpress端点访问网站。

第二种似乎是一种通用的PHP技术。

最好的方法是只编写没有副作用的代码(或者如果您是htaccess中任何php文件的网站所有者,那么就阻止访问),但如果必须这样做,我会说使用第一个,因为它假定了一些特定于wordpress的执行路径。