PHP:الحصول على البيانات تلقائيا أن أعلنت بأنها المتغيرات
سؤال
خذ هذا الكود:
<?php
if (isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
}
if ($action) {
echo $action;
}
else {
echo 'No variable';
}
?>
ومن ثم الوصول إلى الملف ؟ العمل=اختبار هل هناك أي طريقة لمنع $العمل من تلقائيا يتم تعريفه من قبل ؟ عدا بالطبع إضافة
&& !isset($_GET['action'])
لماذا أريد المتغير إلى أن أعلن بالنسبة لي ؟
المحلول
تحقق php الخاص بك.ini عن register_globals
الإعداد.ربما أنت تريد تشغيله.
لماذا أريد المتغير إلى أن أعلن بالنسبة لي ؟
لا. انها رهيبة المخاطر الأمنية.يجعل البيئة, على, بعد, كوكي و الخادم المتغيرات العالمية (PHP manual).هذه هي عدد قليل من محفوظة المتغيرات في PHP.
نصائح أخرى
يبدو register_globals
في php الخاص بك.ini هو الجاني.يجب إيقاف هذا.كما انها ضخمة المخاطر الأمنية أن يكون ذلك على.
إذا كنت على استضافة مشتركة و لا يمكن تعديل php.ini, يمكنك استخدام ini_set() لتحويل register_globals قبالة.
مجموعة register_globals إلى إيقاف, إذا كنت فهمت سؤالك.انظر http://us2.php.net/manual/en/language.variables.predefined.php
إذا لم يكن لديك الوصول إلى php.ini, ، ini_set('register_globals', false)
في البرنامج النصي php لا تعمل (المتغيرات أعلنت بالفعل)
وهو .htaccess مع:
php_flag register_globals Off
يمكن أن تساعد في بعض الأحيان.
يمكنك اختبار ما إذا كانت جميع المتغيرات أعلن بشكل صحيح من خلال تحويل PHP سجل مستوى في PHP.INI
error_reporting = E_ALL
التعليمات البرمجية المتكررة الآن ينبغي أن تولد إشعار.
في بعض نقطة في php التاريخ أنهم قرار مثير للجدل إيقاف register_globals افتراضيا كما كان ضخم الأمن الخطر.أنه يعطي أي شخص المحتملة لحقن المتغيرات في التعليمات البرمجية الخاصة بك, إنشاء عواقب لا يمكن تصوره!هذه "الميزة" حتى إزالتها في php6
إذا لاحظت أنه على الاتصال بالمسؤول لإيقاف تشغيله.