我目前正在从头开始构建一个WordPress主题,作为"在工作中学习"的一种方式.虽然我过去一直非常依赖PageBuilders,但我在后端工作方面经验丰富.我现在希望创建一个没有任何Pagebuilders的主题作为提高其加载速度等的手段.
目前,我目前正在寻找网站文件的安全性,并且遇到了以下术语:
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
?>
Run Code Online (Sandbox Code Playgroud)
我理解这会阻止直接访问Web文件.我不完全确定这是什么意思.例如,我仍然可以通过FTP,服务器和WordPress仪表板访问文件.是否有其他直接访问可以防止这种情况?也许阻止通过WordPress插件等访问?
考虑到这一点,我是否应该假设上面的代码应该作为标准放在主题中的每个文件上?会有例外吗?
对此有任何进一步的解释,将不胜感激.
小智 19
它阻止公共用户通过URL直接访问.php文件.因为如果您的文件包含一些I/O操作,它最终会被(由攻击者)触发,这可能会导致意外行为.
因此,使用片段可以阻止从您的文件(直接)访问,并确保您的主题文件仅在WordPress环境中执行.
用法:
希望能帮助到你
ABSPATH为PHP恒定在由WordPress限定底部的wp-config.php:
/* That's all, stop editing! Happy blogging. */
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
Run Code Online (Sandbox Code Playgroud)
正如您在上面的注释块中看到的那样,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');
Run Code Online (Sandbox Code Playgroud)
您的主题或插件文件:
<?php
if ( ! defined( 'MY_CONSTANT' ) ) {
exit; // Exit if accessed directly
}
Run Code Online (Sandbox Code Playgroud)
更多信息
在 PHP 中定义一个常量:http : //php.net/manual/en/language.constants.syntax.php
PHP 魔法常量:http : //php.net/manual/en/language.constants.predefined.php