تعتبر الاقتباسات السحرية سؤالًا شائعًا بالنسبة لـ PHPer. لقد رأيت بالصدفة مقالًا اليوم، مقترنًا بدليل PHP وردوده، وسأقدم ملخصًا بسيطًا هنا.
باختصار، سوف تفلت علامات الاقتباس السحرية تلقائيًا من البيانات المدخلة عند تشغيلها. من بينها، سيتم تخطي جميع علامات الاقتباس المفردة (')، وعلامات الاقتباس المزدوجة (')، والخطوط المائلة العكسية، والأحرف NULL (تتم إضافة شرطة مائلة عكسية). في الواقع، تستدعي هذه العملية بشكل أساسي وظيفة الخطوط المائلة العكسية.
لماذا تستخدم علامات الاقتباس السحرية
مريحة وسريعة
لقد تصور مصممو PHP برمجة سريعة ومريحة منذ البداية. على سبيل المثال، عند الإدراج في قاعدة بيانات، ستخرج علامات الاقتباس السحرية من البيانات تلقائيًا، وهو أمر مريح للغاية.
جيد للمبتدئين
يمكن أن تساعد الاقتباسات السحرية، إلى حد ما، المبتدئين على تجنب المخاطر الأمنية للنصوص البرمجية. على سبيل المثال، في التعليمات البرمجية دون أي إجراءات حماية، سيؤدي تشغيل علامات الاقتباس السحرية إلى تقليل العديد من المخاطر، مثل مشاكل الحقن. وبطبيعة الحال، فإن استخدام هذه الطريقة وحدها لا يمكن أن يمنع مثل هذه المشكلات الأمنية بشكل كامل.
"ليس لدي إذن بإغلاقه"
من الواضح أنك قد تكون على علم بهذه المشكلة، لكن مساحة المضيف ليست تحت سيطرتك بالكامل.
لماذا لا تستخدم الاقتباسات السحرية
إمكانية النقل سواء تم تشغيل هذه الميزة أم لا، فإنها ستؤثر على قابلية نقل البرنامج النصي لأنها تؤثر على عملياتنا اللاحقة لتصفية البيانات.
مشكلات الأداء سيتم هروب كافة البيانات الخارجية قبل استرجاعها، الأمر الذي سيؤدي بلا شك إلى زيادة تكاليف وقت التشغيل (وليس من الضروري هروب كافة البيانات).
التسبب في الارتباك كما ذكرنا أعلاه، لا يلزم الهروب من جميع البيانات. أحد المواقف التي قد تنشأ هو عند استخدام وظيفة stripslashes "المجنونة" للحصول على البيانات التي لم يتم الهروب منها.
لم يعد PHP6 مدعومًا
من الواضح أن مصممي PHP قد أدركوا "خطأهم"، لذلك قاموا بإهماله في PHP6.
كيفية تعطيل الاقتباسات السحرية
وفقًا لرأيي، من الأكثر موثوقية استخدام ملف التكوين php.ini لتعطيل علامات الاقتباس السحرية عالميًا. ارجع إلى الكود أدناه
؛ علامات الاقتباس السحرية للبيانات الواردة من GET/POST/Cookie.magic_quotes_gpc = Off؛ علامات الاقتباس السحرية للبيانات التي تم إنشاؤها في وقت التشغيل، على سبيل المثال البيانات من exec()، وما إلى ذلك.magic_quotes_runtime = Off; علامات الاقتباس السحرية بنمط Sybase (escape ' مع '' بدلاً من ').magic_quotes_sybase = Off ومع ذلك، قد لا يسمح لك المضيف عبر الإنترنت بتعديل ملف php.ini، لذا يمكنك استخدام ملف .htaccess لتعطيله وإضافة الملف الكود التالي
php_flag magic_quotes_gpc معطل ما ورد أعلاه يمكن أن تظل البيانات متسقة بغض النظر عما إذا تم تعطيل magic_quotes أم لا. ثم يمكن أن تساعدك التعليمات البرمجية التالية
<?phpif (get_magic_quotes_gpc()) {function stripslashes_deep($value) {$value = is_array($value) ?array_map('stripslashes_deep', $value):stripslashes($value);return $ value;}$_GET = array_map('stripslashes_deep', $_GET);$_POST = array_map('stripslashes_deep', $_POST);$_COOKIE = array_map('stripslashes_deep', $_COOKIE);$_REQUEST = array_map('stripslashes_deep' ,$_REQUEST);}