it-swarm.asia

لماذا أحتاج إلى التحقق من وجود wp_nonce_field () قبل استخدامه

لا أفهم حقًا سبب التحقق من وجود وظيفة nonce قبل تشغيلها ...

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 ، فيجب ألا تدعم الإصدارات السابقة ، حيث إنها جميعها غير آمنة تمامًا وأي شخص يستخدمها يحتاج إلى ترقية RIGHT NOW.

في العادة ، لا يتعين عليك التحقق من وجود وظائف من داخل WP ، على عكس وظائف المكونات الإضافية التي قد لا يتم تنشيطها.

أين رأيت هذا التعليق الذي نقلته؟ يجب إزالته.

5
jerclarke

إذا فهمت سؤالك بشكل صحيح - فأنت تسأل لماذا لا توجد حاجة للتحقق مما إذا كانت check_admin_referer () محددة أيضًا؟

بقدر ما أرى من مستندات هذه الوظيفة أقدم بكثير (منذ WP 1.2.0) من wp_nonce_field () (منذ 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