我目前正在从头开始构建一个WordPress主题,作为“在工作中学习”的一种方式。虽然我过去一直非常依赖PageBuilders,但我在后端工作方面经验丰富。我现在希望创建一个没有任何Pagebuilders的主题作为提高其加载速度等的手段。
目前,我目前正在寻找网站文件的安全性,并且遇到了以下术语:
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
?>
我理解这会阻止直接访问Web文件。我不完全确定这是什么意思。例如,我仍然可以通过FTP,服务器和WordPress仪表板访问文件。是否有其他直接访问可以防止这种情况?也许阻止通过WordPress插件等访问?
考虑到这一点,我是否应该假设上面的代码应该作为标准放在主题中的每个文件上?会有例外吗?
对此有任何进一步的解释,将不胜感激。
答案 0 :(得分:14)
它阻止公共用户通过URL直接访问.php文件。因为如果您的文件包含一些I / O操作,它最终会被(由攻击者)触发,这可能会导致意外行为。
因此,使用代码段可以阻止您的文件(直接)访问,并确保您的主题文件只能在WordPress环境中执行。
<强>用法:强>
希望有所帮助
答案 1 :(得分:1)
ABSPATH
是WordPress在wp-config.php
的底部处定义的PHP constant:
/* That's all, stop editing! Happy blogging. */
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
正如您在上面的注释块中看到的那样, WordPress不建议修改这些代码行-可能是因为许多插件和主题都依赖ABSPATH
来验证其PHP文件是否正在WordPress环境中执行。
如果您在wp-config.php
文件的顶部使用此代码段,则将终止wp-config.php
的执行,因为此时尚未定义ABSPATH
。并且依赖wp-config.php
的其他文件将失败(即,您将破坏您的网站)。
if ( ! defined( 'MY_CONSTANT' ) ) { exit; }
是一个片段,广泛用于插件和主题的PHP文件,仅按惯例。从理论上讲,这意味着您可以在wp-config.php
的底部添加自己的常量,您将获得相同的实际结果。
您的wp-config.php
:
if ( !defined('MY_CONSTANT') )
define('MY_CONSTANT', 'fool');
您的主题或插件文件:
<?php
if ( ! defined( 'MY_CONSTANT' ) ) {
exit; // Exit if accessed directly
}
更多信息
在PHP中定义常量:http://php.net/manual/en/language.constants.syntax.php
PHP魔术常数:http://php.net/manual/en/language.constants.predefined.php