سؤال

im إعادة العوملة php على زند رمز و كل رمز هو الكامل من $_GET["this"] و $_POST["that"].لقد استخدمت دائما أكثر phpish $this->_request->getPost('this') و $this->_request->getQuery('that') (هذا لا يجري الكثير من المنطقية مع getquery insteado من getGet).

لذلك أنا أتساءل عما إذا كانت طريقة أكثر أمانا/أفضل/أسهل المحافظة.قرأت في الإطار زند الوثائق التي يجب عليك التحقق من صحة الإدخال الخاص بك منذ وجوه الطلب لن تفعل ذلك.

أن يترك لي مع 2 الأسئلة:

  • ما هو أفضل من هذا اثنين ؟ (أو إذا كان هناك آخر أفضل طريقة)
  • ما هي أفضل الممارسات من أجل التحقق من صحة php الإدخال مع هذه الأساليب ؟

وذلك بفضل!

هل كانت مفيدة؟

المحلول

أنا عادة استخدام $this->_request->getParams();لاسترداد إما وظيفة أو معلمات عنوان URL.ثم يمكنني استخدام Zend_Filter_Input للقيام التحقق من صحة الترشيح.على getParams() لا التحقق من الصحة.

باستخدام Zend_Filter_Input يمكنك القيام به على مستوى التطبيق التحقق من صحة باستخدام زند المصادقون (أو يمكنك كتابة الخاص بك الخاصة جدا).على سبيل المثال ، يمكنك التأكد من 'أشهر الحقل عدد:

$data = $this->_request->getParams();

$validators = array(
    'month'   => 'Digits',
);

$input = new Zend_Filter_Input($filters, $validators, $data);

نصائح أخرى

تمديد براين الإجابة.

حيث يمكنك أيضا التحقق من $this->_request->getPost() و $this->_request->getQuery().إذا كنت التعميم على getParams(), انها نوع من مثل استخدام $_REQUEST superglobal وأنا لا أعتقد أن هذا مقبول من الناحية الأمنية.

إضافة إلى Zend_Filter, يمكنك أيضا استخدام بسيط PHP يلقي المطلوبة.

E. g.:

$id = (int) $this->_request->getQuery('id');

عن القيم الأخرى ، فإنه يحصل على أكثر تعقيدا, لذا تأكد من أن مثلاقتباس الخاص بك الاستفسارات DB (Zend_Db, انظر نقلا عن معرفات ، $db->quoteIdentifier()) و في آراء استخدام $this->escape($var); للهروب من المحتوى.

لا يمكنك كتابة حجم واحد يناسب الجميع التحقق من صحة وظيفة للحصول على/آخر البيانات.كما في بعض الحالات التي تتطلب ميدانية إلى عدد صحيح في الآخرين التاريخ على سبيل المثال.لهذا السبب لا يوجد أي التحقق من صحة المدخلات في الإطار زند.

سيكون لديك لكتابة رمز التحقق في المكان حيث كنت في حاجة إليها.بالطبع يمكنك كتابة بعض الطرق المساعد, ولكن لا يمكنك أن تتوقع getPost() للتحقق من صحة شيء لك من تلقاء نفسه...

وأنها ليست حتى getPost/getQuery مكان للتحقق من أي شيء, انها وظيفة هو أن تحصل على البيانات وان يكن ما يحدث من هناك على أن لا يكون ذلك القلق.

$dataGet  = $this->getRequest()->getParam('id',null);
$valid = new Zend_Validate_Digits();

if( isset($dataGet) && $valid->isValid($dataGet) ){
 // do some...
} else{
  // not set
}

لقد استخدمت دائما أكثر phpish $this->_request->getPost('this') و $this->_request->getQuery('that') (هذا لا يجري الكثير من المنطقية مع getquery insteado من getGet).

ما هو أفضل من هذا اثنين ؟ (أو إذا كان هناك آخر أفضل طريقة)

فقط شرح سريع على اختيار getQuery().صيغة الاختيار يأتي من أي نوع من البيانات ، كيف حصلت هناك.الحصول على آخر هي مجرد طلب طرق تحمل كل أنواع المعلومات ، بما في ذلك ، في حالة طلب POST, قسم المعروفة باسم "مشاركة البيانات".طلب الحصول على لا يوجد لديه مثل هذه الكتلة ، أي متغير البيانات أنه يحمل هو جزء من سلسلة الاستعلام url (الجزء بعد؟).

لذلك ، في حين getPost() يحصل على البيانات من آخر مقطع البيانات بعد الطلب ، getQuery() يقوم باسترداد البيانات من سلسلة الاستعلام إما على أو طلب POST (فضلا عن غيرها من أساليب طلب HTTP).

(لاحظ أن الحصول على طلبات لا ينبغي أن تستخدم أي شيء يمكن أن تنتج الآثار الجانبية, مثل تغيير DB الصف)

حتى في الإجابة على السؤال الأول ، استخدام getPost() و getQuery() الأساليب ، وبهذه الطريقة ، يمكنك أن تكون متأكدا من أين مصدر البيانات (إذا كنت لا تهتم ، getParams() يعمل أيضا ، ولكن قد تشمل بيانات إضافية).

ما هي أفضل الممارسات من أجل التحقق من صحة php الإدخال مع هذه الأساليب ؟

أفضل مكان إلى التحقق من صحة الإدخال حيث كنت أولا استخدامه.وهذا هو القول ، عند سحب من getParams(), getPost(), أو getQuery().هذه الطريقة ، البيانات الخاصة بك هو دائما على حق حيث كنت في حاجة إليها ، إذا كنت تمر ، تعرف أنها آمنة.نأخذ في الاعتبار, إذا كنت تمر عليه إلى وحدة تحكم أخرى (أو وحدة تحكم العمل) ، ربما يجب عليك التحقق من ذلك مرة أخرى هناك ، مجرد أن تكون آمنة.كيف يمكنك أن تفعل هذا يعتمد على التطبيق الخاص بك ، لكنه لا يزال يحتاج إلى أن يتم التحقق.

لا علاقة مباشرة بالموضوع ، ولكن لضمان أن تحصل على عدد المدخلات الخاصة بك ، يمكن أيضا استخدام $var+0 (ومع ذلك إذا كان $var هو تعويم يبقى تعويم) قد تستخدمها في معظم الحالات $id = $this->_request->getQuery('id')+0;

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top