فلسفه
وقتي كسي يك «سوراخ» امنيتي در اسپيپ كشف كند و گزارش دهد، تيم توسعهي اسپيپ با بيشترين سرعت ممكن نسبت به رفع مشكل در نسخهي در دست توسعه و نيز در نسخههاي منتشر شده اقدام ميكند تا از گسترش كد نا امن چلوگيري شود.
با اين حال، بيشتر كاربران وقت يا توانايي كاربرد روزآمد شدهها را ندارند و مايلاند خطرات تحرك كد نا امن را با شانس اينكه يك روزآمدشده با بعضي از كدهاي موجود هماهنگ نباشد تاخت بزنند.
اطلاعات مربوط به مسائل امنيتي براي ارايه دهندگان خدمات ميزباني نيز يك شمشير دو لبه است: از يك طرف انان نميخواهند «سوراخهاي» امنيتي را در سايتهاي ميزباني شدهي خود به حال خود رها كنند، اما از سوي ديگر اختيار اصلاح سايتهاي مشتريان خودشان را هم ندارند. قطع خط كردن يك سايت هم جز براي شركتهاي ميزباني شكاك و چيپ ممكن نيست.
پردهي امنيتي براي پاسخگويي به اين مشكلات است. يك فايل جداگانه از كد پي.اچ.پي است كه به طور كامل از اسپيپ مستقل است، و ميتواند به صورت مستقل از باقي كدها روزآمد شوود، و با تمام نسخههاي اسپيپ، حتي با قديميترين نسخهي آن نيز هم خواني دارد.
اين فايل جايگزين روزآمدسازي نسخههاي اسپيپ شما نميشود، اما ميتواند ضمن انتظار براي نسخهي جديد و ثابت اسپيپ كه قرار است منتشر شود، بعضي از حملات را نيز مسدود كند.
در واقع، پردهي امنيتي ميتواند روي كل يك ميزبان وب فعال شود و هر نگارش پي.اچي.پي (اسپيپ يا نه) آن را اجرا كرده ، و اگر روزآمد سازي شود، تضمين ميكند كه استفاده از تمام سوراخهاي شناخته شدهي امنيتي در هر نسخهاي از اسپيپ غيرممكن ميشود. به همين دليل است كه به آن «پرده» ميگويند: بين بازديدكننده و اسپيپ قرار ميگيرد، و چك ميكند كه بازديد كننده نخواهد از يك حملهي شناخته شده استفاده كند.
وقتي يك نقص جديد كشف شود، كافي است كه براي جلوگيري از هر حملهاي از طريق نقص پيشگفته پردهي امنيتي روزآمدسازي شود: اين امر به مالك سايت وقت ميدهد تا سر فرصت اسپيپ خود را به آخرين نسخه ارتقاء دهد.
بارگذاري
پردهي امنيتي را بارگذاري كنيد :
http://zone.spip.org/trac/spip-zone...
كد اين پرده نيز در نشاني زير در دسترس است:
http://zone.spip.org/trac/spip-zone/browser/_core_/securite/
نيز ميتوانيد با استفاده از SVN آن را بارگذاري و همزمان سازي كنيد:svn co svn://zone.spip.org/spip-zone/_core_/securite/
اسم اين فايل اين است: ecran_securite.php
نصب
براي نصب اين پرده چند روش موجود است:
براي يك سايت منفرد:
از اسپيپ 2.0.9 به بعد، كافي است فايل ecran_securite.php
را در پوشه config/
سايت قرار دهيد تا خودش به صورت خودكار بارگذاري شود.
براي نسخههاي اسپيپ ماقبل نيز لازم است كد زير را در config/mes_options.php
يا در ecrire/mes_options.php3
بر حسب نسخهي اسپيپ مورد استفاده، قرار دهيد (در صورت لزوم پوشه ايجاد شود) :
<?php
@include_once dirname(__FILE__).'/ecran_securite.php';
?>
فايل پردهي امنيتي درست بعد از mes_options.php
بارگذاري خواهد شد.
براي سرور :
اين فايل را در پوشهاي قرار دهيد كه تمام سايتها به آن دسترسي دارند. (به عنوان نمونه در /usr/share/php/ecran_securite/
).
اين كد php.ini
را اصلاح كرده و خطوط زير را به آن اضافه كنيد:
auto_prepend_file '/usr/share/php/ecran_securite/ecran_securite.php'
يا اين كد httpd.conf
, را اصلاح كنيد و خطوط زير را به آن اضافه كنيد:
php_admin_value auto_prepend_file '/usr/share/php/ecran_securite/ecran_securite.php'
هركدام را كه براي استفاده انتخاب كنيد، پردهي امنيتي براي هر «ضربه» پيش از آنكه پي.اچ.پي مانند معمول پرده را باگذاري كند، به طور خودكار گنجانده ميشود. اين امر به پرده اجازه ميدهد تا جلوي هر فراخوان «بدخواه» را بگيرد.
پيكربندي
علاوه بر امنيت، پرده همچنين ميتواند ترافيك موتور جستجو رباتها را تعديل كند، و وقتي كه سرور اشباع شده باشد به آنها بگويد «بعداً برگرديد».
اين رفتار ميتواند با كنجاندن يك خط پيوند در بالاي فايل محقق شود:
define('_ECRAN_SECURITE_LOAD', X);
اين كار حفاظت «ضد -رباتها» را وقتي كه بار سرور از مقدار «ايكس» فراتر رود، فعال ميكند. مقدار پيشگزيده 4 است، براي غيرفعالسازي عدد صفر گذاشته شود.
ادغام
ويرايش بعدي اسپيپ (نسخه 2،1) پردهي امنيتي را ادغام خواهد كرد؛ اگر يك سوراخ پيدا شود، كمترين دردسر باربرداري نسخهي جديد ecran_security.php
, و بارگذاري آن در محل نسخهي قديمي است.
سازگاري
پردهي امنيتي كمترين دخالت ممكن را دارد: كاري جز مسدودسازي متغييرهايي كه به خاطر عملكرد ضعيفشان شناخته شده هستند يا در نسخههاي قديمي و فعلي اسپيپ تأييد شدهاند، و ميتوانند براي حمله مورد استفاده قرار بگيرند ندارد.
با اين همه، پرده بعضي از متغييرهاي خاص را قفل ميكند. به عنوان نمونه، مقادير تمام متغييرها كه به اين شكلid_xxx
نام گذاري ميشوند، بايد عدد صحيح باشند تا از هر نوع تزريق كد اس.كيو.ال از طريق متغييرهاي بسيار رايجي از اين نوع جلوگير شود.
بعضي از پلاگينها با تمام قواعد اين پرده سازگار نيستند. به عنوان نمونه، بعضي از آنها براي ايجاد عنصر جديد x از &id_x=new
استفاده ميكنند. اين پلاگينها براي سازگاري با اسپيپ 2،1 بايد اصلاح شوند تا از قواعد پردهي امنيتي پيروي كنند.
آزمون و راستيآزمانيي
براي راستيآزمايي عملكرد درست اين پرده، نشاني سايت همگاني را با افزودن اين عبارت ?test_ecran_securite=1
, يا اين عبارت &test_ecran_securite=1
به آخر آن فراخوان كنيد. نتيجهي به نمايش درآمده بايد اين باشد:
خطاي 403
شما مجاز به ديدن اين صفحه نيستيد. (آزمايش 1.6.3)