web-dev-qa-db-ja.com

重要なプラガブル関数wp_verify_nonceおよびwp_create_nonceのオーバーライドを許可するのはなぜですか?

/wp-includes/pluggable.php内の関数には、関数wp_verify_nonceおよびwp_create_nonceがあります。両方の機能は、CSRF攻撃に対する保護において非常に重要です。しかし、すべてのナンスが有効なものとして受け入れられるように、プラグイン内でこれらの関数をオーバーライドするのは簡単です。

if( ! function_exists('wp_verify_nonce') ) {
  function wp_verify_nonce($nonce, $action = -1) {
    return 1;
  }
}

私はこれをテストしました、そして確かに、CSRF保護は現在サイト全体で無効になっています。セキュリティ上のリスクがそれほど明白な場合に、これらの関数がpluggable.phpファイルに入れられる理由は何ですか?

3
Honoki

プラグイン可能な機能にセキュリティリスクはありません。セキュリティを低下させるプラグインを誰かがインストールした場合、それは自分の責任です。一方、関数をオーバーライドして、ナンスをより一意にしたり、それらの形式を変更したりすることができます。

カスタム関数wp_verify_nonce()では、オプションの3番目のパラメータを使うことも、nonceが期限切れになる時間を変更することもできます。

今日ではプラグイン可能な機能はもう導入されていません。これらはデバッグするのが難しく、通常はフィルタでも同じことができます。そして、それを再定義した後に他のプラグインが(再び)プラグイン可能な関数を再定義することが確実にできないという問題もあります。

3
fuxia