web-dev-qa-db-ja.com

使用する前にwp_nonce_field()が存在するかどうかを確認する必要があるのはなぜですか

実行前にナンス関数が存在するかどうかを確認する理由を本当に理解していない...

if ( function_exists('wp_nonce_field') ) 
     wp_nonce_field('gmp_nonce_check');

下位互換性について理解しています...

また、下位互換性のためにwp_nonce_field関数が存在することを確認してから呼び出します。

とにかく、ポストバックでチェックすると壊れない

if ( isset($_POST['submit']) ) {
     check_admin_referer('gmp_nonce_check');
1
Jiew Meng

答えはそれを使う前にwp_nonce_field()が存在するかどうかをチェックすべきではないということです!

チェックを実行するための推奨事項は、関数が存在する前からのWordPressのバージョンと互換性があることを前提としています。 Rarstが2.0.4で導入されたものであれば、それらはすべて絶対に安全ではなく、それらを使用している人は誰でも今すぐアップグレードする必要があるため、以前のバージョンをサポートしてはいけません。

通常は、アクティブ化されていない可能性があるプラグインの機能とは異なり、WPの内部から機能の存在を確認する必要はありません。

あなたが引用したそのコメントをどこで見ましたか?削除する必要があります。

5
jerclarke

私があなたの質問を正しく理解しているなら - なぜcheck_admin_referer()が同様に定義されているかどうかをチェックする必要がないのはなぜでしょうか?

私がドキュメントから見る限り、この関数はwp_nonce_field()よりずっと古い(WP 1.2.0以降)(WP 2.0.4以降)。だから私はあなたがそれがcheck_admin_referer()を持っていないという古いバージョンに遭遇する可能性ははるかに低いと思います。

1
Rarst

使用しようとしている機能が含まれていないバージョンのWordPressでコードが実行されたときに致命的なエラーが発生してその後アプリケーションが停止するのを防ぐために、機能の存在を確認します。

これは後方互換性を保証しますか?もちろんです。ただし、さらに重要なことに、このチェックにより、コードの実行時にコード全体がアプリケーション全体をクラッシュさせることを防止できます。

エラー処理はどのシステムでも「優雅」でなければなりません。つまり、アプリケーションは自分自身のエラーを検出し、エンドユーザーの中断を最小限に抑えながら適切な方法でそれらを処理する方法を知っている必要があります。 http://www.devshed.com/c/a/PHP/PHP-Application-Development-Part-Two/2/#wIxuV7yhLhBTU1UZ.99 で詳細を参照してください。

したがって、あなたのコードでは、次のことができます。

if ( function_exists('wp_nonce_field') ) {
 wp_nonce_field('gmp_nonce_check');
} else {
 //do nothing
 exit() ;
}
0
Daryl