سلام
در اين تاپيك قصد داريم پيرامون امنيت در برنامه نويسي تحت وب مباحثي رو مطرح كنيم !
Register Globals
همانطور كه در سايت مرجع ذكر شده است ، Register Globals يك آسيب پذيري نيست و در واقع يك ريسك امنيتي به حساب مي رود.
register_globals قابليت خاصي در برنامه نويسي php است كه به برنامه نويس امكان مقداري دهي متغير ها را به طور مستقيم و از طريق نوار آدرس مي دهد.
اين قابليت نه تنها يك مشكل امنيتي به حساب نمي آيد بلكه يك مزيت ويژه نيز به حساب مي آيد ؛ اما از آنجا كه امكان و احتمال بروز اشتباه برنامه نويس در بكار گيري اين قابليت زياد است به صورت پيش فرض اين قابليت در نسخه هاي جديد php غير فعال مي باشد.
مثال زير از سايت مرجع به وضوح بيانگر اين ريسك مي باشد :
کد PHP:
<?php
// define $authorized = true only if user is authenticated
if (authenticated_user()) {
$authorized = true;
}
// Because we didn't first initialize $authorized as false, this might be
// defined through register_globals, like from GET auth.php?authorized=1
// So, anyone can be seen as authenticated!
if ($authorized) {
include "/highly/sensitive/data.php";
}
?>
فرض كنيد كاربر آدرس زير را در مرورگر وارد كنيد :
file.php?authorized=1
در اين صورت متغير authorized برابر true تلقي خواهد شد !
راهكار : در صورتي كه مايل به استفاده از Register Globals هستيد كافيست در كد نويسي دقت نموده و در ابتداي برنامه متغير هاي لازم را مقدار دهي اوليه كنيد.
در كد زير اين ريسك امنيتي رفع شده است :
کد PHP:
<?php
// initialize $authorized as false,
$authorized = false;
// define $authorized = true only if user is authenticated
if (authenticated_user()) {
$authorized = true;
}
if ($authorized) {
include "/highly/sensitive/data.php";
}
?>
چگونه Register Globals را فعال/غير فعال كنيم ؟
فايل php.ini را با يك ويرايش گر مناسب باز كنيد و خط زير را بيابيد :
register_globals =
براي فعال كردن بايد :
register_globals = On
و غير فعال كردن :
register_globals = Off
باشد.
ادامه دارد ...