ما هي أفضل طريقة لاستخدام mysql_real_escape_string و htmlspecialchars أثناء حفظ البيانات في CakePhp؟

StackOverflow https://stackoverflow.com/questions/956761

سؤال

أنا أستخدم FCKeditor مع CakePhp وعند حفظ البيانات المرسلة من المحرر، أريد تشغيل وظائف HTMLSPecialChars () و MySQL_REAL_ESCAPE_STRING () على البيانات لتنظيفها قبل تخزينها في قاعدة البيانات الخاصة بي. المشكلة هي أنني لست متأكدا حقا من أين أفعل ذلك داخل إطار CakePhp. حاولت في وحدة التحكم مثل هذا:

function add() 
{
   if (!empty($this->data)) 
   {
      if ($this->Article->save(mysql_real_escape_string(htmlspecialchars($this->data)))) 
      {
         $this->Session->setFlash('Your article has been saved.');
     $this->redirect(array('action' => 'index'));
      }

   }
}

ومع ذلك، فإن هذه البيانات هي صفيف وتلك الوظائف تتوقع سلاسل بحيث لن تعمل. هل أفعل ذلك في صفيف التحقق من صحة النموذج؟ ليس لدي فكره. أيضا، اسمحوا لي أن أعرف ما إذا كان تشغيل HTMLSPecialChars () داخل mysql_real_escape_string () ليست ممارسة جيدة.

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

المحلول

لا تستخدم htmlspecialchars() عندما انت حفظ البيانات، واستخدامها عندك انتاج البيانات إلى HTML. ماذا لو كنت بحاجة إلى النظر إلى البيانات في بعض السياق بخلاف HTML؟

أيضا أنا لست مستخدم كعكة، لكنني مفاجأة إذا كنت بحاجة إلى تطبيق mysql_real_escape_string() أثناء حفظ البيانات أيضا. يجب أن يحميك طبقة الوصول إلى قاعدة البيانات ضد حقن SQL، ومن خلال القيام بذلك يدويا، ستنتهي بتخزين الأوتار المضاعفة.

نصائح أخرى

الجواب القصير والبسيط هو - إذا تم استخراج الوصول إلى قاعدة البيانات، فلا حاجة لك لاستدعاء هذه الوظائف على الإطلاق.

المكان الوحيد الذي يحتاجون إليه هو إذا قمت ببناء SQL الفعلي من BITS من السلاسل. الذي يجب ألا تفعله على أي حال، ولكن هذه قصة أخرى.

خلاصة القول هو - الإطار سوف يفعل الشيء الصحيح، لا تتداخل.

تحرير: بوصف Bill Karwin - htmlspecialchars() هو من قسم خاطئ تماما هنا.

إذا كنت تقوم ببناء سلاسل SQL الخاصة بك مع CakePhp، فإن CakePhp يوفر وظيفة الهروب:

escape(string $string, string $connection)

http://book.cakephp.org/view/1186/escape.

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