امنیت در php

اردیبهشت ۳, ۱۳۹۲ توسط : محمد حسین عابدین پور

با عرض سلام

به عنوان اولین نوشته در phpro به نظرم رسید که بهتره در مورد امنیت در php صحبت کنم.

به همنن خاطر یک pdf در همین رابطه آماده کردم که امیدوارم مورد پسند واقع شود.

فایل پی دی اف

موفق باشید.

بازدید : ۸۹۰۱

محمد
اردیبهشت ۴, ۱۳۹۲ @ ۲:۲۱ ب.ظ

عالی بود. امیدوارم شاهد ادامه این مقاله و نیز مقالات دیگری از شما باشم.

با تشکر فراوان

پاسخ دادن
    محمد حسین عابدین پور
    اردیبهشت ۴, ۱۳۹۲ @ ۲:۳۱ ب.ظ

    خواهش می کنم.

    پاسخ دادن
سید امیر فاطمی
اردیبهشت ۴, ۱۳۹۲ @ ۸:۳۴ ب.ظ

خسته نباشی ولی مطالب خیلی خیلی سطحی هست و راه حل های که بیان شده بسیار ضعیف و ناکارآمد هستند!
منتظر مطالب قوی تر از شما هستیم

پاسخ دادن
    اردیبهشت ۴, ۱۳۹۲ @ ۹:۲۷ ب.ظ

    ممنون
    باگ های امنیتی زیاد هست و من هم چند تا رو بیشتر بررسی نکردم.
    در مورد راه های جلوگیری اگه راه بهتری سرغ دارید ممنون میشم به من هم بگید

    پاسخ دادن
      سید امیر فاطمی
      اردیبهشت ۵, ۱۳۹۲ @ ۹:۵۵ ق.ظ

      مثلا برای جلوگیری از تزریق sql به چند دلیل زیر راهکارهایی که شما فرمودید روش خوبی برای این کار نیست .
      ۱٫ وقتی توی یک سایت بزرگ هزاران پارمتر گرفته میشه . و نمیشه مطمئن بود که همه اون ها فیلتر شدن و ممکنه یکی از زیر دست رد بشه . (خب میدونیم که حتی یک اشتباه به سادگی قابل پیدا شدن و نفوذ کامل به سرور هست)
      ۲٫ فیلتر هایی که شما گذاشتی خیلی جاها کاربرد نداره.مثلا قرار کاربر بتونه در جواب یک سوال کد جاوااسکریپت یا حتی پی اچ پی بنویسه!اونوقت تکلیف چیه؟!
      ۳٫ راهای دور زدن این فیلتر های که بیان کردید وجود داره . مثلا فرض کنید سیستم به کلمه خاص حساس هست.خب اگر هکر این کلمه رو url encode کنه اونوقت فیلتر شما رو دور زده ولی مرورگر متوجه معنی این کلمه میشه
      ۴٫ این روش در سایت های بزرگ یک مشکلی که بوجود میاره اینکه خیلی دستاپا گیره و اگر قرار باشه هزارن پارامتر فیلتر بشن در سرعت کار تاثیر منفی میزاره
      و ….

      پاسخ دادن
        اردیبهشت ۵, ۱۳۹۲ @ ۷:۴۶ ب.ظ

        درود
        با یک foreach ساده مشکل اولتون حل میشه.
        در مورد مشکل دوم باید خدمتتون عرض مکنم که این فانکشن کدی رو حذف نمی کنه و تنها مشکل هنگام خروجی تبدیل اینتر به \n و وجود / هست که با یه فانکشن ساده حل میشه:
        function clean_back($string) {
        $string = str_replace(array(‘\r\n’, ‘\r’, ‘\n’), “”, $string);
        return stripslashes($string);
        }
        در مورد مشکل سوم یک مرتبه تست کنید متوجه میشید.
        در مورد مشکل چهارم هم که همون مشکل اول هست.

        پاسخ دادن
          سید امیر فاطمی
          اردیبهشت ۶, ۱۳۹۲ @ ۸:۵۸ ق.ظ

          ببخشید مشکل اول چطور با foreach حل میشه؟!!!!
          هزارتا پرامتر ، هزار جای برنامه! چطور با یه حلقه حل میشه؟!!!!!!!
          برای مشکل دوم پیشنهاد میکنم حتما تست بفرمایید! بعضی از کد ها حذف میشه!

    فربد
    اردیبهشت ۴, ۱۳۹۲ @ ۹:۳۶ ب.ظ

    سلام.

    دادا راه حل ها رو من بررسی کردم مشکلی نداره و همش در شرایطی که خودشون در سناریو ها و … مشخص کردند عملی هست.

    باتشکر به خاطر زحمت هاتون 😉

    پاسخ دادن
اردیبهشت ۶, ۱۳۹۲ @ ۱۱:۴۹ ق.ظ

@سید امیر فاطمی
خدمتتون باید عرض کنم سایت های بزرگ اصولا شی گرا هستن و در شی گرایی معمولا برای کار با دیتابیس یک کلاس نوشته میشه که خیلی راحت از کلاس فیلتر میشه.اما در کل به کد زیر توجه کنید:
foreach ($_REQUEST as $key => $value) {
$_REQUEST[$key]=clean($_REQUEST[$key]);
}
یک نمونه کد عرض کنید که حذف میشه تا بررسی کنم من از این فانکشن توی ۲۰-۳۰ پروژه استفاده کردم و مشکلی نداشتم

پاسخ دادن
اردیبهشت ۶, ۱۳۹۲ @ ۱۲:۱۹ ب.ظ

عالی بود محمد جان

پاسخ دادن
محمد
اردیبهشت ۷, ۱۳۹۲ @ ۸:۳۸ ق.ظ

در زمینه sql injection من شنیدم بهتره از stored procedure ها استفاده بشه

پاسخ دادن
    مرتضی
    اردیبهشت ۷, ۱۳۹۲ @ ۹:۵۷ ق.ظ

    با سلام
    اگه براتون امکان داره در مورد stored procedure هم توضیحاتی بدید تا ما مبتدی ها هم یادبگیریم .

    پاسخ دادن
اردیبهشت ۱۲, ۱۳۹۲ @ ۱۰:۴۶ ب.ظ

ممنون استفاده کردم

پاسخ دادن
اردیبهشت ۱۳, ۱۳۹۲ @ ۲:۳۰ ب.ظ

مرسی مفید بود 🙂

پاسخ دادن
اردیبهشت ۱۸, ۱۳۹۲ @ ۱۰:۲۷ ق.ظ

ممنون و متشکر …اگه امکانش هست مساله امنیت در php رو ادامه بدید

پاسخ دادن
اردیبهشت ۲۶, ۱۳۹۲ @ ۱۰:۰۳ ق.ظ

داشتم دنبال راه حل مختلف برای پچ کردن باگ های امنیتی میگشتم به یک تابع جدید برخوردم گفتم بگم شما هم استفاده کنید ازش. برای فیتر کردن ورودی هایی که از کابر گرفته میشه راه های مختلفی وجود داره . یکی از راه حل ها استفاده از تابع های خود پی اچ پی هستند که از نسخه ۵٫۲٫۰ اضافه شدند. توابع :
filter_var()
filter_input_array()
filter_var_array()
منبع : http://php.net/manual/en/function.filter-input.php
توضیحات بیشتر : http://phpmaster.com/input-validation-using-filter-functions/

پاسخ دادن
safa
اردیبهشت ۳۱, ۱۳۹۲ @ ۱۲:۲۳ ب.ظ

سلام یه سوال دارم
اگه برای هر ورودی که در فرم داریم محدودیت ایجاد کنیم با preg_match باز هم باید نگران تزریق کدهای مخرب باشیم؟ مثلا بگیم اگه ،؟،’،” باشه آلارم بده که اینا مجاز نیستند
مرسی

پاسخ دادن
FixXxer
خرداد ۱, ۱۳۹۲ @ ۴:۴۴ ب.ظ

سلام و خسته نباشید.
میخواستم اول از همه بگم که امنیت هیچ وقت ۱۰۰ نمیشه.
پس لازم نیست از هم ایراد بگیرین .
اگه میشد با یک مقاله ۱۰ برگی جلوی باگ هایی ه هر ساله در owasp جزه TOP10 هستن گرفت که دیگه zone-h نبود.
در رابطه با امن کردن query ها در دیتیباس باید بگم دیگه mysql_real_escape_string() جواب نمیده.
میتونید این مطلبو که یکی از دوستای دورم نوشته بخونید تا متوجه بشیند.
http://blog.y-shahinzadeh.ir/2012/07/bypassing-mysql_real_escape_string-and-magic_quotes_gpc/

و برای امن کردننش من یک نمونه کد میزارم تا مشکل همه رفع بشه.
موفق باشید.
<?php

if (isset($_GET['Submit'])) {

// Retrieve data

$id = $_GET['id'];
$id = stripslashes($id);
$id = mysql_real_escape_string($id);

if (is_numeric($id)){

$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
$result = mysql_query($getid) or die('’ . mysql_error() . ” );

$num = mysql_numrows($result);

$i=0;

while ($i < $num) {

$first = mysql_result($result,$i,"first_name");
$last = mysql_result($result,$i,"last_name");

echo '’;
echo ‘ID: ‘ . $id . ‘First name: ‘ . $first . ‘Surname: ‘ . $last;
echo ”;

$i++;
}
}
}
?>

پاسخ دادن
تیر ۴, ۱۳۹۲ @ ۷:۲۱ ب.ظ

برای اینجانب جالب بود ساعتی هست درون سایتان دارم تمام بخشها رو مطالعه می کنم واقعا دستتون درد نکنه موفق باشید

پاسخ دادن

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


*