admin-ajax.phpを使用する理由とその仕組み
-
-
注目すべきことに、どのような答えでも、 `themes/example/json.php`が主要なセキュリティの脆弱性と見なされるべき理由が説明されます.Of note, any answer would talk about why `themes/example/json.php` should be considered a major security vulnerability
- 2
- 2015-06-10
- Tom J Nowell
-
2 回答
- 投票
-
- 2015-06-10
1)jsonを個別にエンコードする代わりに
admin-ajax.php
を使用する理由themes/example/json.php
のようなファイルを作成し、そこでデータをエンコードしますか?admin-ajax.php
を使用するということは、WordPressCoreがロードされて利用可能であることを意味します.それがないと、必要なファイルを手動でロードする必要があります.これは複雑なプロセスであり、コアをよく知らないと失敗する傾向があります.そして、Javascriptのセキュリティはどの程度優れていますか?2)
admin-ajax.php
はどのように機能しますか?よくわからない ファイル.すべての機能が読み込まれるので、すぐに使用できますか?- WordPress Coreをロードします.つまり、
$wpdb
などを使用できます. および$WP_Query
.それは約25行目です. - いくつかのヘッダー(37〜41行目)を送信します.
- コンテンツタイプヘッダー
- 結果をキャッシュしないようにブラウザに指示するヘッダー
- 興味深いヘッダーは、
send_nosniff_headers()
によって送信されたヘッダーです.
- および
nocache_headers()
.
-
admin_init
フックが起動します. - コアアクションは動的に定義および登録されます-46行目から73行目.
これらは、必要でない限り、つまり、必要とされない限り、登録されません.
$_GET
または$_POST
を介してリクエストされます. - 「ハートビート」APIフックが起動します-75行目
- 要求しているユーザーの「ログイン」ステータスがチェックされ、 適切な管理フックまたは「特権なし」フックが発生します.
私の意見では、項目#1と#6がAJAXAPIを使用する主な理由です.ほぼ確実に必要なWordPressCoreがあり、他のWordPressと同じログインセキュリティシステムがあります.
1) Why use
admin-ajax.php
instead of encoding your json in a separate file likethemes/example/json.php
and encode your data there?Using
admin-ajax.php
means that the WordPress Core is loaded and available. WIthout that, you would need to hand load the files you need, which is a complicated process and prone to failure if you don't know the Core very, very well. And, how good are you with Javascript security?2) How does
admin-ajax.php
work? I don't understand much from that file. Does it load all the functions so you are ready to use them?- It loads the WordPress Core, meaning you can use things like
$wpdb
and$WP_Query
. That is through about line 25. - It sends a few headers-- lines 37 - 41.
- A content type header
- A header to tell browsers not to cache the results
- The interesting headers are those sent by
send_nosniff_headers()
- and
nocache_headers()
.
- The
admin_init
hook fires. - Core actions are defined and registered dynamically-- lines 46 - 73.
These won't be registered unless they are needed-- that is, unless
they are requested via
$_GET
or$_POST
. - The "heartbeat" API hook fires-- line 75
- The "logged in" status of the requesting user is checked and the appropriate administrative or "no priviledge" hook is fired.
Items #1 and #6 are the primary reasons to use the AJAX API, in my opinion. You have the WordPress Core, which you almost certainly need, and you have the same login security system as with the rest of WordPress.
-
- 2015-06-10
admin-ajax.php
はWordPressのAJAX API の一部です、はい、バックエンドとフロントの両方からのリクエストを処理します. ここに私があなたの質問のために理解するものがあります: 2)admin-ajax.phpはどのように機能しますか?
ロジックの場合はこちらにアクセスしてください. これは、JavaScriptなどをキューに入れる方法をすでに知っていることを前提としています.
JavaScriptピース:
jQuery(document).ready(function($) { // We'll pass this variable to the PHP function example_ajax_request var fruit = 'Banana'; // This does the ajax request $.ajax({ url: ajaxurl, data: { 'action':'example_ajax_request', 'fruit' : fruit }, success:function(data) { // This outputs the result of the ajax request console.log(data); }, error: function(errorThrown){ console.log(errorThrown); } }); });
PHPピース:
function example_ajax_request() { // The $_REQUEST contains all the data sent via ajax if ( isset($_REQUEST) ) { $fruit = $_REQUEST['fruit']; // Let's take the data that was sent and do something with it if ( $fruit == 'Banana' ) { $fruit = 'Apple'; } // Now we'll return it to the javascript function // Anything outputted will be returned in the response echo $fruit; // If you're debugging, it might be useful to see what was sent in the $_REQUEST // print_r($_REQUEST); } // Always die in functions echoing ajax content die(); } add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' ); // If you wanted to also use the function for non-logged in users (in a theme for example) add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );
1)jsonを個別にエンコードする代わりにadmin-ajax.phpを使用する理由 themes/example/json.phpのようなファイルを作成し、そこにデータをエンコードしますか?
これが役立つかもしれません.
admin- ajax.phpとAjaxリクエストのカスタムページテンプレート admin-ajax.php
is part of the WordPress AJAX API, and yes, it does handle requests from both backend and front. here what i figure-out for your question that is:2) How does admin-ajax.php work?
for the logic you can visit here.
This assumes you already know how to enqueue JavaScript, etc.
JavaScript Piece:
jQuery(document).ready(function($) { // We'll pass this variable to the PHP function example_ajax_request var fruit = 'Banana'; // This does the ajax request $.ajax({ url: ajaxurl, data: { 'action':'example_ajax_request', 'fruit' : fruit }, success:function(data) { // This outputs the result of the ajax request console.log(data); }, error: function(errorThrown){ console.log(errorThrown); } }); });
PHP Piece:
function example_ajax_request() { // The $_REQUEST contains all the data sent via ajax if ( isset($_REQUEST) ) { $fruit = $_REQUEST['fruit']; // Let's take the data that was sent and do something with it if ( $fruit == 'Banana' ) { $fruit = 'Apple'; } // Now we'll return it to the javascript function // Anything outputted will be returned in the response echo $fruit; // If you're debugging, it might be useful to see what was sent in the $_REQUEST // print_r($_REQUEST); } // Always die in functions echoing ajax content die(); } add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' ); // If you wanted to also use the function for non-logged in users (in a theme for example) add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );
1) Why use admin-ajax.php instead of encoding your json in a separate file like themes/example/json.php and encode your data there?
may be this helpful.admin-ajax.php vs Custom Page Template for Ajax Requests
-
ねえ、これらのアクションフック「wp_ajax_example_ajax_request」と「wp_ajax_nopriv_example_ajax_request」について説明してもらえますか.どこにも説明がありません.また、ajaxurlは何に解決しますか?ありがとうHey, can you explain these action hooks 'wp_ajax_example_ajax_request' and 'wp_ajax_nopriv_example_ajax_request' I find no explanation anywhere. Also what does ajaxurl resolve to? Thanks
- 0
- 2020-04-13
- David Okwii
jsonデータに対する私のajax呼び出しはこのように機能します 関数.php:
javascript:
2つの質問があります.
1)
themes/example/json.php
のような別のファイルにjsonをエンコードする代わりに、admin-ajax.phpを使用して、そこでデータをエンコードするのはなぜですか?2)admin-ajax.phpはどのように機能しますか?そのファイルからはよくわかりません.すべての機能が読み込まれるので、すぐに使用できますか?
ありがとう!