1- از برگه تقلب براي SQL Injection استفاده کنيد
هر توسعه دهنده وب بايد به خوبي با شيوه هاي امنيتي آشنا باشد و بايد برنامه ها را با اين شيوه هاي امنيتي درون ذهنش طراحي کند. قانون اوليه اين است که هرگز به داده هاي دريافت شده از جاي ديگر اعتماد نکنيد. قانون ديگر اسکيپ (escape) داده ها قبل از ارسال به جاي ديگري است. ترکيب اين دو قانون براي ايجاد اصول امنيتي پايه مي تواند بدين صورت ساده شوند: ورودي، اسکيپ خروجي (FIEO).
علت اصلي حمله تزريق به پايگاه داده، اسکيپ کردن داده هاي خروجي است. به خصوص وقتي رخ مي دهد که وجه تمايز بين قالب پرس و جو SQL و داده هاي استفاده شده توسط پرس و جو به دقت حفظ نمي شود. اين حمله در برنامه هاي PHP که پرس و جوها با روش زير ساخته مي شوند، رايج است:
در اين حالت مقدار متغير
$_GET[‘name’]
توسط کاربر، منبعي ديگر، تعيين مي شود که نه شده و نه اسکيپ.
اسکيپ شدن داده ها باعث مي شود تا قالب اصلي آنها در يک متن جديد حفظ شود. تأکيد بر اسکيپ داده هاي خروجي تذکري است براي اينکه در خارج از برنامه بايد داده ها اسکيپ شده استفاده شوند چراکه در غير اين صورت ممکن است به صورت اشتباه تفسير شوند. در مقابل آن کردن داده ها اين اطمينان را به ما مي دهد که داده ها قبل از استفاده اعتبارسنجي شده اند. تأکيد بر ورودي بيانگر اين است که منبع داده هاي خارج از برنامه بايد شود زيرا نمي توان به آنها اعتماد کرد.
با فرض اينکه از MySQL استفاده مي کنيم، مي توان آسيب پذيري حمله تزريق به SQL را با اسکيپ اسم توسط تابع ()mysql_real_escape_string کاهش داد. حتي اگر اسم هم شود يک لايه امنيتي بيشتري به وجود مي آيد. (اجراي چندين لايه امنيتي ” دفاع در عمق” ناميده مي شود و يک روش امنيتي بسيار خوب است.) در مثال زير براي افرايش شفافيت کد از قراردادهاي نامگذاري استفاده شده و در آن ورودي و اسکيپ خروجي داده ها نشان داده مي شود:
گرچه استفاده از قراردادهاي نامگذاري حتي با وجود اينکه چيزي شده يا نه و يا اسکيپ شده يا نه، مي تواند به شما کمک کند اما استفاده از عبارت هاي آماده، روش بسيار بهتري است. خوشبختانه با استفاده از PDO توسعه دهندگان PHP يک API جهاني براي دسترسي به داده ها دارند که از عبارت هاي آماده پشتيباني مي کند حتي اگر پايگاه داده اصولي نباشد.
حتما بخوانيد: چرا از PHP استفاده مي کنيم؟ پاسخ به همه سوالات رايج کاربران
به ياد داشته باشيد آسيب پذيري هاي حمله تزريق به SQL زماني وجود دارد که تمايز بين قالب يک پرس و جو SQL و داده هاي استفاده شده توسط آن پرس و جو به دقت حفظ نشود. با استفاده از عبارت هاي آماده مي توانيد اين مسئوليت را با ايجاد قالب پرس و جو و داده در مراحل جداگانه به سمت بانک اطلاعاتي هل دهيد:
صفحه http://php.net/pdo اطلاعات و نمونه هاي بيشتري را ارائه مي دهد. عبارت هاي آماده قوي ترين موارد حفاظتي را براي مقابله با حمله تزريق به SQL پيشنهاد مي دهند.
درباره این سایت