اذهب إلى المحتوى
  • 0

حل مشكلة FILTER_SANITIZE_STRING is deprecated

جود بدر

السؤال

السلام عليكم 

ظاهر لي باعلى الصفحة هذا السطر وما قدرت اعرف وش المشكلة ؟ انا طبقت مع الكورس بالضبط لكن يظهر لي هذا السطر 

Deprecated: Constant FILTER_SANITIZE_STRING is deprecated in /Applications/XAMPP/xamppfiles/htdocs/php_flexcourses/contact.php on line 6

رجاءً الي يشرح لي الحل يشرحة بالتفصيل لان انا جديدة بـ php 

 

شكرا

‏لقطة الشاشة ١٤٤٥-٠١-١٣ في ٨.٢٥.٢٤ م.png

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

أرجو إن كان السؤال متعلق بدورة PHP في أكاديمية حسوب، التعليق أسفل الفيديو المتعلق بالسؤال، وطرح الأسئلة العامة هنا في قسم أسئلة البرمجة لمساعدتك بشكل أفضل.

وبخصوص سؤالك، الرسالة التي تظهر لك هي تحذير من PHP يفيد بأن الثابت (constant) FILTER_SANITIZE_STRING قد تم إهماله (deprecated) وفي PHP، الثوابت هي متغيرات لا يمكن تغيير قيمتها بعد تعريفها، وتستخدم لتعيين قيم ثابتة.

والمشكلة هي أنه بدءًا من إصدار PHP 8.1، تم وضع علامة deprecated على الدالة FILTER_SANITIZE_STRING وأصبحت قديمة وغير مستخدمة، ولكن لا مشكلة، فالدالة ما زالت تعمل في النسخ الحديثة من PHP، ولكن يُنصح باستخدام وسائل أخرى لتحقيق نفس الغرض.

وعليك استبدال دالة FILTER_SANITIZE_STRING بدالة أخرى، وهناك العديد من الدالات التي يمكنك استخدامها، وإحدى الخيارات الشائعة هي دالة htmlspecialchars().

وإليك مثال لكيفية استخدام دالة htmlspecialchars():

$sanitized_string = htmlspecialchars($_POST['name']);

وتستقبل الدالة htmlspecialchars() سلسلة كإدخال وتعيد سلسلة مع جميع الأحرف الخاصة المشفرة، مما يساعد على منع هجمات حقن النص التشعبي (XSS).

وبذلك يتم حل المشكلة وتتجنبي ظهور التحذير، وإذا أردتي الشرح بشكل مفصل، فإليك التوضيح:

والفلتر الذي تم إلغاء دعمه كان له غرض غير واضح، ولم يكن من السهل معرفة بالضبط ماذا كان من المفترض أن يحقق أو متى ينبغي استخدامه.

وكان أيضًا يُشتبه بأنه نفس فلتر النص الافتراضي (FILTER_UNSAFE_RAW) بسبب اسمه، على الرغم من أن الفلتر الافتراضي للنص الآمن هو FILTER_UNSAFE_RAW، وقرر مجتمع PHP أنه لا يجب دعم استخدام هذا الفلتر بعد الآن.

والفلتر كان يزيل كل محتوى بين علامات <>، كما كان يزيل جميع بايتات NUL. وأخيرًا، كان يقوم بترميز ' و " إلى كيانات HTML.

ولاستبداله لديك خياران:

  • استخدم فلتر النص الآمن الافتراضي FILTER_UNSAFE_RAW الذي لا يقوم بأي عملية تصفية، وينبغي استخدامه إذا كنتِ لا تعرفين بالضبط سلوك FILTER_SANITIZE_STRING وترغبين فقط في استخدام فلتر افتراضي يمنحك قيمة النص.
  • وفي حال كنتِ تستخدمين ذلك الفلتر للحماية ضد ثغرات XSS (Cross-Site Scripting)، فاستبدليه باستخدام htmlspecialchars().
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

تظهر رسالة الخطأ "Deprecated: Constant FILTER_SANITIZE_STRING is deprecated" بسبب استخدام ثابت (Constant) يُسمى FILTER_SANITIZE_STRING الذي أصبح قديمًا (مهجورًا) في PHP. هذا يعني أن الثابت الذي تم استخدامه قد لا يُدعم في إصدارات PHP الحديثة، وينبغي استخدام بديل له.

لحل هذه المشكلة، سنقوم بتحديث الكود لاستخدام بديل للثابت FILTER_SANITIZE_STRING. لاحظ أن الثابت FILTER_SANITIZE_STRING كان يُستخدم لتطهير (sanitize) البيانات المدخلة من أجل تجنب هجمات الحقن والأخطاء البرمجية الأمنية. لذلك سنستخدم وظيفة مخصصة لتحقيق نفس الغرض.

إليك الكود الجديد الذي يحل محل الكود القديم:

<?php
// محلّ هذا السطر القديم
// deprecated: define("FILTER_SANITIZE_STRING", "some_value");

// الكود الجديد باستخدام وظيفة مخصصة للتطهير
function custom_sanitize_string($string) {
    return filter_var($string, FILTER_SANITIZE_STRING);
}

// استخدام الوظيفة الجديدة لتطهير البيانات
$cleaned_data = custom_sanitize_string($_POST['input_name']);
?>

في هذا الكود، قمنا بإنشاء وظيفة مخصصة تسمى custom_sanitize_string وهي تستخدم دالة filter_var لتطهير البيانات من خلال الثابت FILTER_SANITIZE_STRING. بدلاً من تحديد الثابت مباشرةً، يتم استدعاء الوظيفة custom_sanitize_string لتنفيذ عملية التطهير.

يرجى استبدال "input_name" بالاسم الفعلي للحقل الذي ترغب في تطهير بياناته في النموذج الخاص بك.

وبهذا، يجب أن تتخلص من رسالة الخطأ المُهجور ويتم تطهير البيانات بشكل آمن.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بالإضافة للشرح السابق هناك بعض البدائل الأخرى إذا كنت ترغب في استبداله:

  • استخدام الفلتر الافتراضي للسلسلة FILTER_UNSAFE_RAW الذي لا يقوم بأي تصفية. يجب استخدام هذا إذا كنت لا تعرف شيئًا عن سلوك FILTER_SANITIZE_STRING وترغب فقط في استخدام فلتر افتراضي يعيد لك القيمة النصية.
  • إذا كنت تستخدم هذا الفلتر لحماية ضد ثغرات XSS، فاستبدل استخدامه بـ htmlspecialchars(). لا تستدعي هذه الدالة على بيانات الإدخال. لحماية ضد ثغرات XSS، تحتاج إلى ترميز الإخراج!
  • إنشاء بوليفيل (polyfill)، فيمكنك فعل ذلك بسهولة باستخدام تعبيرات العبارات العادية (regex).
function filter_string_polyfill(string $string): string

{

    $str = preg_replace('/\x00|<[^>]*>?/', '', $string);

    return str_replace(["'", '"'], ['&#39;', '&#34;'], $str);

}

هنا، تم استخدام `preg_replace()` لإزالة الشروط التي تطابق النصوص بين `<` و `>` واستخدام `str_replace()` لتحويل علامات الاقتباس إلى كيانات HTML."

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...