نمایش نتایج 1 تا 8 از 8

نام تاپیک: کمک برای جلوگیری از SQL Injection

  1. #1

    کمک برای جلوگیری از SQL Injection

    سلام
    داشتم یه برنامه چک میکردم
    متوجه شدم mysql_real_escape_string به تنهایی نمیتونه جلوی این حمله رو بگیره
    بهتره که stripslashes استفاده بشه و همچنین ورودی ها فیلتر بشن

    مثلا اگه محتوا عددی هست بهتره از این استفاده کرد :
    if (is_numeric($id))

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

    1- از stripslashes و mysql_real_escape_string استفاده بشه ؟
    2- برای اعداد این کد رو میزنم اول :
    $sid=preg_replace('#[^0-9]#i','',$_GET['id']);

    3- برای اعداد و حروف انگلیسی :
    $sid=preg_replace('#[^A-Z-a-z-0-9]#i','',$_GET['id']);

    4- برای اعداد و حروف انگلیسی و حروف فارسی :
    $sid=preg_replace('#[^A-Z-a-z-0-9\ا\ب\پ\ت\ث\ج\چ\ح\خ\د\ذ\ر\ز\ژ\س\ش\  ص\ض\ط\ظ\ع\غ\ف\ق\ک\گ\ل\م\ن\و\ه\ی\ك  \آ\ي\ئ]#i','',$_GET['id']);


    اگه مورد 2 استفاده بشه و تمام ورودی ها فقط عدد بشن ، آیا نیاز به مورد 1 هست ؟
    مورد 4 از نظر منطقی صحیح هست ؟
    ممنون

  2. #2
    کاربر دائمی آواتار tehro0n
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    متغیر!
    پست
    465

    نقل قول: کمک برای جلوگیری از SQL Injection

    مورد 4 رو نمی دونم تا حالا ندیده بودم، ولی مورد 3 کار 2 رو می کنه و در ورودی کاراکترها هم باید از escape استفاده کنید..
    شما به جای مورد 4 می تونید از htmlspecialchars و urldecode استفاده کنید، البته دیکد کردن وقتی هست که ورودی شما هنگام ارسال انکد بشه

  3. #3

    نقل قول: کمک برای جلوگیری از SQL Injection

    مشکل دیکد کردن نیست
    مشکل ورودی برای کشیدن اطلاعات به بیرون هست
    فرض کنیم قرار در سایت جستجو بشه
    خب اطلاعات رو بر اساس GET میگیره دیگه
    این متغیر رو حتما باید escape کنیم یا با فیلتر کردن مورد 4 مشکل حل میشه ؟

  4. #4
    کاربر دائمی آواتار tehro0n
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    متغیر!
    پست
    465

    نقل قول: کمک برای جلوگیری از SQL Injection

    ببینید وقتی htmlspecialchars میزنید کاراکترهای غیر مجاز رو مجاز می کنه و وقتی در نهایت هم escape می کنید دیگه نیازی به مورد 4 نیست، برای حروف فارسی هم می تونید از انکد و دیکد استفاده کنید که به اعداد و حروف انگلیسی تبدیل بشه پس 4 حذف میشه..

  5. #5
    کاربر دائمی
    تاریخ عضویت
    آبان 1390
    محل زندگی
    http://reza.biz
    پست
    858

    نقل قول: کمک برای جلوگیری از SQL Injection

    mamali-mohammad یه بار از PDO استفاده کن ، یه عمر شب آسوده بخواد .
    دیگه این دنگ و فنگ هارو نداری

  6. #6
    کاربر دائمی آواتار colors
    تاریخ عضویت
    بهمن 1389
    محل زندگی
    کــردســــــــــتــان
    پست
    1,075

    نقل قول: کمک برای جلوگیری از SQL Injection

    سلام

    این تابع رو جناب eshpilen نوشتن. عالیه...
    function quote_smart($value, $identifier=false)
    {

    if(!is_numeric($value)) {
    if(get_magic_quotes_gpc()) $value = stripslashes($value);
    if(!$identifier) return "'" .mysql_real_escape_string($value) . "'";
    else if(strpos($value, '`')===false) return '`' .$value . '`';
    else {
    $this->error("Value contains invalid character (backtick - '`') for identifiers");
    return false;
    }
    }
    else return $value;

    }


    فقط کافیه مقدیر رو بدن هیچ کوتیشنی ( " or ' ) بهش بدین

  7. #7
    کاربر دائمی آواتار soroush.r70
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    مازندران - آمل
    پست
    1,157

    نقل قول: کمک برای جلوگیری از SQL Injection

    نقل قول نوشته شده توسط colors مشاهده تاپیک
    سلام

    این تابع رو جناب eshpilen نوشتن. عالیه...
    function quote_smart($value, $identifier=false)
    {

    if(!is_numeric($value)) {
    if(get_magic_quotes_gpc()) $value = stripslashes($value);
    if(!$identifier) return "'" .mysql_real_escape_string($value) . "'";
    else if(strpos($value, '`')===false) return '`' .$value . '`';
    else {
    $this->error("Value contains invalid character (backtick - '`') for identifiers");
    return false;
    }
    }
    else return $value;

    }


    فقط کافیه مقدیر رو بدن هیچ کوتیشنی ( " or ' ) بهش بدین

    من از این سورس به این صورت استفاده میکنم اونو قرار می دم در داخل کلاس خودم و به این صورت در متدهای post و get صدا می زنم درسته


    $id=$class->quote_smart($_GET['id']);


    $name=$class->quote_smart($_post['name']);

  8. #8
    کاربر دائمی آواتار colors
    تاریخ عضویت
    بهمن 1389
    محل زندگی
    کــردســــــــــتــان
    پست
    1,075

    نقل قول: کمک برای جلوگیری از SQL Injection

    نقل قول نوشته شده توسط soroush.r70 مشاهده تاپیک
    من از این سورس به این صورت استفاده میکنم اونو قرار می دم در داخل کلاس خودم و به این صورت در متدهای post و get صدا می زنم درسته


    $id=$class->quote_smart($_GET['id']);


    $name=$class->quote_smart($_post['name']);
    بله درسته...

تاپیک های مشابه

  1. سوال: استفاده از preg_replace برای جلوگیری از sql injection مناسبه ؟
    نوشته شده توسط mamali-mohammad در بخش PHP
    پاسخ: 19
    آخرین پست: جمعه 28 مرداد 1390, 00:35 صبح
  2. جلوگیری از sql injection ???
    نوشته شده توسط miladanimator در بخش PHP
    پاسخ: 27
    آخرین پست: شنبه 30 مرداد 1389, 11:31 صبح
  3. روش هایی برای جلوگیری از sql injection
    نوشته شده توسط amirepsilon در بخش PHP
    پاسخ: 1
    آخرین پست: سه شنبه 28 آبان 1387, 07:39 صبح
  4. راهکار شما برای مقابله با sql injection
    نوشته شده توسط hmm در بخش ASP.NET Web Forms
    پاسخ: 19
    آخرین پست: جمعه 02 شهریور 1386, 14:46 عصر

قوانین ایجاد تاپیک در تالار

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