السلام عليكم
عدنا
حماية سكربتاتنا :
البيئة البرمجية
لحماية سكربتاتنا يجب ان نوفر بيئة خاصة و محمية , الأغلبية هنا يستعملون الPHP كمجرد module في الApache و كما تعلمون الApache عادة ما يكون في Group او مجموعة خاصة و يكون اسمها في الغالب" nobody "
و اذا اردنا مثلا عمل سكربت يستعلم بيانات من قاعدة بيانات اذن يجب ان نجعل قاعدة البيانات متاحة للمستخدم " nobody" لكي يستطيع القيام بعملية الإستعلام + حماية القاعدة من خلال تحديد صلاحيات الApache او تخصيص الإتصال بقاعدة البيانات و حمايتها يا إما بعمل حماية للملفات التي تتصل بالقاعدة (قاعدة البيانات طبعا ) و ذلك يكون بhtaccess , LDAP , ...
وهذا طبعا لا يكفي و لا يجعل حماية المجلدات الأخرى و قواعد البيانات مضمونة فإن بستعمال الPHP بإمكانك تغير مجلدك بإستعمال الchroot function
و غيرها من الfunctions مثل : exec , system ....
و لكن مثل هذه الأشياء بإمكانك الوقاية منها و منع حدوثها بإستعمال open_basedir
و أيضا الSAFE MODE و الDisabled_functions يجب تعديلهامن php.ini
حماية كلمات و المرور و التثبت في البيانات التي يتم ادخالها لقواعد البيانات
في هذا المثال سنأخذ الpostreSQL
كود PHP:
<?
$query = sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",addslashes($username), md5($password));
$result = pg_exec($conn, $query);
$query = sprintf("SELECT 1 FROM users WHERE name='%s' AND pwd='%s';",addslashes($username), md5($password));
$result = pg_exec($conn, $query);
if (pg_numrows($result) > 0) {
echo "Welcome, $username!";
}
else {
echo "Mr $username Happy new DAY :p";
}
?>
في هذا المثال يتم تشفير كملة المرور md5 ثم في محاولة تسجيل الدخول نقوم بالتثبت في كلمة المرور المخزنة و طبعا نلاحظ بعض الإجراءات الأمنية مثل استعمال addslashes
بإمكان استعمال عدة دوال اخرى لتنقية و التثبت من المعلومات المدخلة الى قاعدة البيانات : htmlspecialchars , trim ...
مثال لهجوم : مثل لو اراد شخص ما ادخال username الخاص به و كتب مثلا <h1>you site is defaced by me</h1> و ثم اردت عرض الأعضاء الذين اشتركو ستجد ان العضو هذا اسمه بالحجم الكبير و بذلك يجب استعمال htmlspecialchars في عرض قائمة الأعضاء ...
و في ايضا الSQL injection سأشرحها في المرة القادمة لو اردتم طبعا
و ان شاء الله يكون ردي نفعكم بشي