نکات بسیار کاربردی برای برنامه نویسی پیشرفته در PHP
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 پیشنهاد می دهند.
برای مطالعه ادامه مطللب کلیک کنید....