我不时遇到以下主题中的代码片段:

if ( ! defined('ABSPATH')) exit('restricted access');


它是主题中一些(全部?)PHP文件的开头,应该以防止恶意来源直接访问该文件。

我发现二十和十一不包含此文件,并且从未在WordPress官方文档中推荐过它。对我来说,这似乎是个好主意,但我对安全性的判断还不够高,因此无法在Google上找到很多东西。

我应该在自定义主题中添加这些内容吗?如果是这样,应该在所有PHP文件中还是仅在其中一些文件中?

评论

只供以后的读者阅读,它可以写得更短,更好:define('ABSPATH')OR exit;

甚至更短:define('WPINC')? : 死(); :P

我还想知道是否值得添加这样的代码,只是为了避免在错误日志中看到有关未定义函数的PHP错误。机器人似乎有时会直接点击这些文件,但由于未加载WP引导程序,因此出现类似“调用未定义函数query_posts()的调用”之类的错误

#1 楼

通常,您不需要它。但是…至少有一种极端的情况:


如果主题文件是模板的一部分,则

且它使用来自调用上下文的全局变量(父文件),

和register_globals是on

,它只是使用这些变量而没有任何安全检查...

…攻击者可以调用此文件,用GETPOST设置缺少的变量,并使主题文件将其打印出来。然后是一个安全问题。

所以…最好的选择不是像示例中那样进行上下文检查,而是好的代码:避免全局变量,在打印出来之前先检查它们的内容。

在某些情况下,当我认为其他人会使用我的代码并在不考虑安全性的情况下对其进行更改时,我会添加上下文检查。没伤。

评论


如果模板部分仍然包含至少一个会导致PHP致命错误的函数调用,那么这种情况仍然可行吗?

– Chris_O
2012年8月25日下午4:52

@Chris_O取决于外观的顺序。

– fuxia♦
2012年8月25日在4:57

有道理并且完全同意在文件调用之间不使用全局变量的另一个原因。

– Chris_O
2012年8月25日在4:59

安全永远比后悔更好。太多的安全不会伤害,对吗?

– Sean Berg
2012年8月25日在17:41

如果您做对了所有事情,则不应使用不需要的代码。这个问题证明了它使代码难以遵循。

– fuxia♦
2012年8月25日17:45