安全是一种不断变化的景观,随着时间的流逝,脆弱性会不断发展。以下是您应该保护的常见漏洞的讨论,以及保护主题免受剥削的技术。

漏洞的类型

SQL注入

当未正确消毒的值允许输入数据中的任何SQL命令进行可能执行时,就会发生SQL注入。为了防止这种情况,WordPress API是广泛的,提供了类似的功能add_post_meta();而不是您需要通过SQL手动添加元元(INSERT INTO wp_postmeta…)。

exploits_of_a_mom

XKCD 妈妈的漏洞

将主题与SQL注入更强化的第一个规则是:当有WordPress功能时,请使用它。

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

SQL查询中的所有数据必须在执行SQL查询之前进行SQL驱散以防止SQL注入攻击。用于SQL-Escaping的最佳功能是$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)

跨站点脚本(XSS)发生在邪恶的政党将JavaScript注入网页中时。

通过逃避输出,删除不需要的数据来避免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(发音为See-Surf)是当邪恶的政党欺骗用户在其经过身份验证的Web应用程序中执行不必要的动作。例如,网络钓鱼电子邮件可能包含指向页面的链接在WordPress管理员中删除用户帐户。

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

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

保持最新

重要的是要保持潜在的安全漏洞。以下资源提供了一个很好的起点:

By zhuon

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注