در مطلب امنیت در برنامه نویسی ، ۸ مورد را بر شمردیم که با رعایت آنها، میتوانیم کد امنی بنویسیم و نرمافزار، اپلیکیشن یا سرویس وبی که میسازیم، ما و اطلاعات کاربرانمان را محفوظ نگاه دارد. در ادامه به ۳ مورد بعدی اشاره میکنیم :
جلوگیری از حمله تزریق SQL:
برای اجرای کوئریهای پایگاه دادهتان باید از PDO استفاده کنید. با استفاده از Parameterized Query و prepared میتوانید جلوی SQL Enjection را بگیرید.
نگاهی به مثل زیر بیندازید :
<?php $sql = "SELECT * FROM users WHERE name=:name and age=:age"; $stmt = $db->prepare($sql); $stmt->execute(array(":name" => $name, ":age" => $age));
در کد بالا، ما برای پارامترهای اسم دار :name و :age از prepare استفاده کردیم. که باعث میشود موتور پایگاه داده، کوئری را pre-compile کند و بعد مقادیر را به پارامترهای اسم دار انتساب دهد. وقتی تابع execute() را فراخوانی شد، کوئری با مقادیر واقعی پارامترهای نامدار اجرا میشود. اگر با این روش کد بنویسید، خرابکار نمیتواند SQL مخرب را به عنوان کوئری تزریق کند و پایگاه داده شما امن میماند.
محافظت از فایل سیستم (File System prepared) :
به عنوان یک توسعه دهنده باید طوری کد بزنید که هیچ یک از سیستمهایتان فایل سیستمهای شما را به خطر نیاندازند.
<?php if (isset($_GET['filename']) { $filename = $_GET['filename']; header('Content-Type: application/x-octet-stream'); header('Content-Transfer-Encoding: binary'); header('Content-Disposition: attachment; filename="' . $filename . '";'); echo file_get_contents($filename); }
اسکریپت بالا میتواند خطرناک باشد، چون میتواند هرفایلی در هر پوشهای که به آن دسترسی دارد را به کار بگیرید، برای مثال پوشه session و system . راه حل این است که مطمئن شوید، اسکریپت به هر فایلی از پوشه اختیاری دسترسی نداشته باشد.
محافظت از دادههای نشست (Session Data) :
به صورت پیش فرض اطلاعات session در یک پوشه موقت نوشته شده است. دریک هاست مشترک، کسی غیر از شما میتواند با نوشتن یک اسکریپت، به راحتی اطلاعات session شما را بخواند. بنابراین شما نباید اطلاعات مهم مانند رمزعبور و شماره بانکی و غیره را در session دخیره کنید.
یک روش خوب برای نگاهداری اطلاعات session، رمزگذاری اطلاعات ذخیره شده در آن است. این راه به طور کامل مشکل را حل نمیکند مادامی که اطلاعات رمز شده امن نباشند، اما حداقل قابل خواندن نیستند. شما همچنین باید دادههای ذخیره شده در session را در جای دیگری مانند پایگاه داده ذخیره کنید. در زبان PHP میتوانید از متد session_set_save_handler() نیز استفاده کنید.
[…] ما و اطلاعات کاربرانمان را محفوظ نگاه دارد، در مطلب امنیت در برنامه نویسی قسمت دوم به سه مورد دیگر پرداختیم، و در ادامه به ۲ مورد […]