跳转到主要内容

常见漏洞

常见漏洞

安全是一个不断变化的环境,漏洞会随着时间的推移而演变。以下讨论了您应该防范的常见漏洞,以及保护您的主题免遭利用的技术。

漏洞类型

SQL注入

当输入的值未正确清理时,就会发生 SQL 注入,从而可能执行输入数据中的任何 SQL 命令。为了防止这种情况,WordPress API 非常丰富,提供了诸如此类的功能, add_post_meta();而无需您通过 SQL ( INSERT INTO wp_postmeta…) 手动添加帖子元。

妈妈的剥削

xkcd妈妈的功绩

强化主题抵御 SQL 注入的第一条规则是:当有 WordPress 功能时,使用它。

但有时您需要执行 API 中未考虑到的复杂查询。如果是这种情况,请始终使用这些 $wpdb 功能。这些是专门为保护您的数据库而构建的。

SQL查询中的所有数据在执行SQL查询之前都必须进行SQL转义,以防止SQL注入攻击。用于 SQL 转义的最佳函数是$wpdb->prepare()同时支持类似sprintf()和类似vsprintf()的语法。

$wpdb->get_var( $wpdb->prepare(
    "SELECT something FROM table WHERE foo = %s and status = %d",
    $name, // an unescaped string (function will do the sanitization for you)
    $status // an untrusted integer (function will do the sanitization for you)
) );

跨站脚本 (XSS)

当不法分子将 JavaScript 注入网页时,就会发生跨站脚本攻击 (XSS)。

通过转义输出、删除不需要的数据来避免 XSS 漏洞。由于主题的主要职责是输出内容,因此主题应 根据内容的类型使用适当的功能转义动态内容。

转义功能之一的示例是从用户配置文件中转义 URL。

<img src="<?php echo esc_url( $great_user_picture_url ); ?>" />

可以对包含 HTML 实体的内容进行清理,以仅允许指定的 HTML 元素。

$allowed_html = array(
    'a' => array(
        'href' => array(),
        'title' => array()
    ),
    'br' => array(),
    'em' => array(),
    'strong' => array(),
);

echo wp_kses( $custom_content, $allowed_html );

跨站请求伪造 (CSRF)

跨站点请求伪造或 CSRF(发音为 sea-surf)是指不法分子诱骗用户在其进行身份验证的 Web 应用程序中执行不需要的操作。例如,网络钓鱼电子邮件可能包含指向某个页面的链接,该页面在 WordPress 管理员中删除用户帐户。

如果您的主题包含任何基于 HTML 或 HTTP 的表单提交,请使用 随机数 来保证用户打算执行操作。

<form method="post">
    <!-- some inputs here … -->
    <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?>
</form>

保持最新状态

及时了解潜在的安全漏洞非常重要。以下资源提供了一个良好的起点: