私の質問です:私がAJAX関数を書くとき、私はそれを別のファイルを使って書くことができます。そのファイルにwp-load.php
をインクルードし、WPコア関数を使用することができます。私はこれが間違っていることを知っています。あなたはそれがどれほど悪いのか教えてもらえますか?これは大きなセキュリティ上のリスクですか?どのようなセキュリティ上のリスクとデメリットがありますか?
それは非常に悪いことであり、そして大きなセキュリティホールです、あなたはこれらの問題に直面しなければならないでしょう:
mu-plugins
に置くと、エンドポイントで500の致命的なエラーが発生します。テーマやプラグインの中のスタンドアロンエンドポイントはセキュリティ上のリスクである、AJAXハンドラ、あるいは画像のためのスタンドアロンファイルでさえあると言っても過言ではありません。開発者は、そのセキュリティの評判のためにそれを却下しました)
あなたはWP AJAX APIを使うことができましたが、もっと良いのですが、自分自身で認証チェックやサニタイズチェックを実装する必要があり、ちょっとした癖があります。また、標準のエンドポイントと同様に、構造体も提供しません(標準のエンドポイントでは、受信したものを返すことができます(まったく返された場合)。
代わりに、REST APIをregister_rest_route
と一緒に使用してください。使用がより簡単で、気まぐれが少なく、認証も処理されます。それはまたあなたにもっと親切なURLと名前空間を与えます、例えば:
function tomjn_rest_test() {
return "moomins";
}
add_action( 'rest_api_init', function () {
register_rest_route( 'tomjn/v1', '/test/', array(
'methods' => 'GET',
'callback' => 'tomjn_rest_test'
) );
} );
あなたはこれを見ることができます:
https://tomjn.com/wp-json/tomjn/v1/test
これで私はいろいろなことができます。
これらはすべて、コア用に書かれたコードによって処理されます。もちろん、それぞれをWP AJAXハンドラに手作業で自分で実装することもできますが、これはもっと簡潔でテスト済みです(そしてWPにはほとんどありません_コミュニティはこれを正しく行うのに十分な経験を積んでいます)、例えば上記のエンドポイントを管理者だけが利用できるようにするには
register_rest_route( 'tomjn/v1', '/test/', array(
'methods' => 'GET',
'callback' => 'tomjn_rest_test',
'permission_callback' => function( $req ) {
return current_user_can('manage_options');
}
) );
おまけとして、HTMLではなくデータを返す、標準のHTTP GET PUT POSTなどを使う、検証可能なJSONレスポンスを返すなど、特定のベストプラクティスをはるかに使いやすくします。
先ほど、内部のプラグインが無効になっていても、ネイティブエンドポイントはアクティブであると述べました。無効にする唯一の方法は、内部チェックを使用するか、ファイルを削除することです。なぜこれが悪いのでしょうか。
これの核心は、ある状況では適切かもしれないが別の状況ではそうでないかもしれないということです。
たとえば、シナリオ1
管理者は、ユーザーがページを更新せずにフロントエンドにログインして登録できるようにするプラグインをインストールします。これを行うために、プラグインにはユーザーを作成するためのエンドポイントがあります。しかし、管理者は登録が彼らが望んでいたものではないことに気付き、ログインするだけで、プラグインを無効にします。ファイルはまだ存在します、そしてユーザーはまだ新しいユーザーを作成するためにエンドポイントをロードすることができます。
シナリオ2:
コンタクトフォームを介してブログの管理者にEメールを送信するために、マルチサイトインストールでプラグインが使用されています。これはすべて予想通りに機能していますが、この機能に関心のない他のブログがこのサイトにあります。ブログに使用されているドメインを変更することにより、攻撃者はネットワーク上の他のブログのコンテキストでcontactフォームによって使用されているエンドポイントをロードし、adminロールを持っている人に電子メールを送信して電子メールを送信できます。マルチサイトインストールの任意の場所
シナリオ3:
プラグインには、ユーザーが自分のEメールを変更できる便利なデバッグ機能がありますが、セキュリティー上の理由から、この機能はオフにしています。ただし、電子メール変更フォームを処理するエンドポイントはスタンドアロンファイルです。フォームの作成方法を知っている人ならだれでも電子メールを変更できます。
カスタムファイルエンドポイントを作成する主な欠点は、ファイルが を認識しないことです。ここで、 wp-load.php
は一般的な場合です。あなたが in WP環境であるときはいつでも、あなたは提供されたコンテキストを持っています。あなたが任意のWPファイルからどこでPHP coreを見つけようとしているのであれば、それはそこにすべての可能な設定のために働くつもりはないでしょう。
それでこのテクニックの最大の欠点はそれが公共の拡張で distributed になることができないということです。