核心要点
is_email()
、username_exists()
、term_exists()
、validate_file()
、sanitize_email()
、sanitize_option()
、sanitize_text_field()
、sanitize_hex_color()
、wp_kses_post()
、esc_html()
、esc_url()
、esc_attr()
和 esc_textarea()
。本文是与 SiteGround 合作创作的系列文章的一部分。感谢您支持使 SitePoint 成为可能的合作伙伴。
鉴于 WordPress 占据了 27% 的网络份额,安全性是任何在这一广受欢迎的开源平台上运行网站的人的首要关注点。尽管 WordPress 核心代码的安全性由专门的开发团队负责维护,但数千个第三方插件和主题却并非如此,这些插件和主题扩展了 WordPress 的功能,使其几乎可以完成任何您想要的操作。仅仅一个存在漏洞的插件或主题就可能对数百万个网站构成高风险。
除非您使用可靠的托管服务提供商(例如我们的合作伙伴 SiteGround),该提供商允许自动更新 WordPress 插件并定期进行安全检查,否则您的网站主题和插件的安全性完全取决于您自己。
在本文中,我将介绍一些准则和 WordPress 函数,您可以在 WordPress 主题开发中应用这些准则和函数,以确保您的产品在编写时就将用户的安全放在首位。
安全意识强的开发者的原则
对于专门的 WordPress 插件和主题开发者而言,安全性是他们在编写每一行代码时都放在首位的因素。
编写安全 WordPress 主题的整体方法包括关注以下一般原则:
需要注意的事项
您需要注意的最常见威胁是:
网络安全一直在发展,因此了解最新的威胁至关重要。在 WordPress 方面,Sucuri 博客是了解漏洞和攻击的好地方。
数据验证、清理和转义
在接受来自任何来源(例如用户、网络服务、API 等)的任何输入数据之前,您必须检查它是否符合您的预期并且有效。此任务称为验证。
例如,如果您通过网站上的表单收集用户的电子邮件,则您的代码需要检查用户是否输入了一些文本输入(例如,不是一些数字或什么都没有),并且该输入对应于有效的电子邮件地址,然后再将该数据输入数据库。
您可能认为这种检查在主题中几乎不需要。实际上,最好使用插件而不是主题来包含表单。但是,情况并非完全如此。例如,如果您计划通过自定义器添加主题选项,则可能需要对用户的输入执行一些数据验证。
清理包括过滤或清理来自用户、网络服务等的数据,这些数据即将存储到数据库中。在此过程中,您可以删除数据中可能造成危害或不需要的任何内容,例如 JavaScript 语句、特殊字符等。
转义包括确保数据安全显示,例如删除特殊字符、编码 HTML 字符等。这里的推荐做法是尽可能晚地进行转义,即在屏幕上显示数据之前进行转义。
您需要在 WordPress 主题中进行大量的清理和转义。实际上,为了安全起见,最好的方法是清理/转义所有动态数据,即在 HTML 源代码中未硬编码的任何数据。
WordPress 验证函数
您可以使用许多方便的 PHP 函数执行基本验证。
例如,要检查变量是否不存在或其值设置为false,可以使用 empty()
。
但是,为了使验证变得轻而易举,WordPress 提供了这些有用的函数。
您可以使用 is_email( $email )
函数检查数据是否是有效的电子邮件地址。
例如:
<code class="language-php"> if ( is_email( 'test@domain.com' ) ) { echo '有效的电子邮件地址。'; }</code>
要检查有效的用户名,WordPress 提供了 username_exists( $username )
:
<code class="language-php"> $username = 'testuser'; if ( username_exists( $username ) ): echo "用户名已存在。"; endif;</code>
要确保标签、类别或其他分类法术语存在,您可以使用 term_exists( $term, $taxonomy = '', $parent = null )
:
<code class="language-php"> // 检查类别“cats”是否存在 $term = term_exists('cats', 'category'); if ($term !== 0 && $term !== null) { echo "“cats”类别存在。"; }</code>
要确保文件路径有效(但不是如果它存在),请使用 validate_file( $file, $allowed_files )
:
<code class="language-php"> $path = 'uploads/2017/05/myfile.php'; // 返回 0(有效路径) return validate_file( $path );</code>
WordPress 清理/转义函数
使用内置的 WordPress 函数来清理和转义数据是完成这项工作的最快捷、最安全的方法,因此请将其作为您的首选。
以下只是一些我在开发 WordPress 主题时经常使用的函数。
sanitize_email( $email )
删除在有效电子邮件地址中不允许的所有字符。这是一个来自 Codex 条目的示例:
<code class="language-php"> $sanitized_email = sanitize_email(' admin@example.com! '); // 将输出:admin@example.com echo $sanitized_email;</code>
sanitize_option( $option, $value )
根据选项的性质清理选项值,例如来自自定义器输入的值。这是一个示例:
<code class="language-php"> sanitize_option( 'admin_email', 'admin@test.com!' );</code>
sanitize_text_field( $str )
清理用户或数据库提供的字符串,但您可以使用它来清理任何您希望仅为纯文本的数据:
<code class="language-php"> // 输出:标题 echo sanitize_text_field('<h1>标题</h1>');</code>
sanitize_hex_color( $color )
和 sanitize_hex_color_no_hash( $color )
在 WordPress 自定义器的上下文中工作。
当您的主题允许用户为各种网站元素选择颜色时,它们非常方便。
第一个函数验证以 # 符号为前缀的十六进制颜色条目,而第二个函数处理没有 # 的颜色数据。
来自 WordPress.org 代码参考的示例:
<code class="language-php"> $wp_customize->add_setting( 'accent_color', array( 'default' => '#f72525', 'sanitize_callback' => 'sanitize_hex_color', ) );</code>
wp_kses_post( $data )
过滤内容,只留下允许的 HTML 标签。在自定义器上下文中,当您的主题允许用户输入一些带有 HTML 格式的文本时,这非常有用:
<code class="language-php"> function yourtheme_sanitize_html( $input ) { return wp_kses_post( force_balance_tags( $input ) ); }</code>
esc_html( $text )
是一种简单的转义 HTML 块的方法。例如,如果您想在 HTML 标签内输出一些文本,以确保此文本本身不包含任何 HTML 标签或其他无效字符,您可以编写:
<code class="language-php"> <h2><?php echo esc_html( $title ); ?></h2></code>
esc_url( $url )
在您想要检查和清理 URL(包括 href 和 src 属性中的 URL)时非常有用。例如:
<code class="language-php"> <a href="https://www.php.cn/link/9e52112668804599bae71e241e4b4548'https://website.com'%20);%20?>">很棒的网站</a></code>
esc_attr( $text )
用于您的主题动态输出 HTML 属性的任何地方:
<code class="language-php"> <a href="https://www.php.cn/link/1649f854581e9c03bc2c4e06023c5b99'/'%20)%20);%20?>" rel="home"></a></code>
您可以使用 esc_textarea( $text )
来转义用户在文本区域中键入的文本:
<code class="language-php"> <textarea><?php echo esc_textarea( $text ); ?></textarea></code>
资源
以下很棒的资源对我真正掌握在 WordPress 主题中编写安全代码非常有帮助:
或者,您可以在我们为您整理的这份方便的比较中了解托管服务提供商如何在 WordPress 安全性方面提供帮助。
如果您对主题开发本身感兴趣,您可以学习从头开始创建一个基本的主题,方法是在 SitePoint 的“构建您的第一个 WordPress 主题”课程中学习:加载播放器……
结论
安全性必须放在所有 WordPress 开发者的首位。WordPress 通过提供大量您可以插入主题中的现成函数,让您有一个良好的开端。
因此,使用 WordPress 验证和清理/转义函数是您开始编写安全可靠的 WordPress 主题(用户将学会信任)的最简单方法。
在编写 WordPress 主题或插件时,您对安全性考虑了多少?您如何解决安全问题?
点击下面的评论框分享!
关于 WordPress 主题验证和转义函数的常见问题解答
WordPress 编码标准是由 WordPress 制定的一套特定规则和指南,以确保 WordPress 代码的一致性和质量。这些标准很重要,因为它们使代码更易于阅读、理解和维护。它们还有助于防止常见的编码错误和安全漏洞。对于开发者而言,遵循这些标准对于确保其主题和插件与 WordPress 及其他主题和插件兼容至关重要。
如果操作不当,编辑 WordPress 代码可能会很危险。建议在更改主题代码时使用子主题。这样,您就可以进行更改而不会影响原始主题。此外,在进行任何更改之前,务必备份您的网站。使用合适的代码编辑器,而不是 WordPress 编辑器来编辑代码。最后,在将更改应用于您的实时网站之前,请在暂存网站上测试您的更改。
在定性分析中,代码用于标记、编译和组织您的数据,而主题用于识别数据中的模式和关系。代码通常是表示特定数据片段的单个单词或短语。另一方面,主题更广泛,代表从编码数据中出现的更大的概念或想法。
主题编码是定性研究中使用的一种方法,用于识别和分析数据中的模式或主题。在 WordPress 中,主题编码可以指开发具有特定设计或功能的主题的过程。这涉及以反映主题预期设计或功能的方式编写和组织代码。
验证和转义函数是 WordPress 中的安全措施。验证是检查用户输入的数据以确保其在处理之前符合特定条件的过程。转义是通过去除可能导致安全漏洞的有害数据来确保输出安全的过程。这些函数对于防止 SQL 注入和跨站脚本 (XSS) 等安全问题至关重要。
验证和转义数据对于确保 WordPress 网站的安全非常重要。如果没有这些过程,您的网站可能会受到攻击,攻击者会将有害数据注入您的网站,从而导致潜在的数据丢失或未经授权访问您的网站。
WordPress 提供了一些用于验证和转义数据的函数。例如,您可以使用 sanitize_text_field()
函数验证文本输入,并使用 esc_html()
函数转义 HTML 输出。在处理用户输入或将数据输出到浏览器时,务必使用这些函数。
编写安全 WordPress 代码的一些最佳实践包括遵循 WordPress 编码标准、验证和转义所有数据、使用 nonce 验证请求来源、在执行操作之前检查用户权限以及使 WordPress、主题和插件保持最新。
WordPress 开发者手册是学习 WordPress 编码标准的绝佳资源。它提供了对标准的详细解释和示例。还提供许多在线教程和课程,涵盖 WordPress 编码标准。
在为 WordPress 编码时应避免的一些常见错误包括不遵循 WordPress 编码标准、不验证或转义数据、硬编码 URL、不使用 nonce 进行表单提交以及不使 WordPress、主题和插件保持最新。
以上是用内置的WordPress函数编码安全主题的详细内容。更多信息请关注PHP中文网其他相关文章!