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

نام تاپیک: نمیتونم از bindParam تو fulltext search استفاده کرد

  1. #1
    کاربر دائمی
    تاریخ عضویت
    بهمن 1392
    محل زندگی
    Earth
    پست
    144

    نمیتونم از bindParam تو fulltext search استفاده کرد

    سلام
    وقتی keywordی که گرفتم رو یکراست میزارم تو کوئری مشکلی نداره و درست کار میکنه:

    کد HTML:
    $keyword = $_POST['keyword'];
        $query = "SELECT * FROM info WHERE MATCH(name,lname,fathersname) AGAINST ('$keyword' IN BOOLEAN MODE);";
        
        $result = $db->prepare($query);
        
        $result->execute();
        $results = $result->fetchAll();
        var_dump($results);
    اما خب این امن نیست و باید کلمه ورودی رو فیلتر کرد با bindParam مثل کد زیر:

    کد HTML:
        $keyword = $_POST['keyword'];
        $query = "SELECT * FROM info WHERE MATCH(name,lname,fathersname) AGAINST (':keyword' IN BOOLEAN MODE);";
        
        $result = $db->prepare($query);
        
        $result->bindParam(':keyword', $keyword, PDO::PARAM_STR);
        
        $result->execute();
        $results = $result->fetchAll();
        var_dump($results);
    اما این جوری به من هیچ نتیجه ایی نمیده!! مشکل اینجاست که ارور هم نمیده که بخونم بدونم مشکل از کجاست فقط یه آرایه خالی میشه نتیجه سرچ

    میشه بگید من دارم کجا اشتباه میکنم؟ اگه راه حلی بدید ممنون میشم

    تشکر از شما دوستان
    آخرین ویرایش به وسیله DelDard : چهارشنبه 02 فروردین 1396 در 11:49 صبح

  2. #2
    کاربر دائمی
    تاریخ عضویت
    بهمن 1391
    محل زندگی
    جزیره مارماری
    پست
    1,137

    نقل قول: نمیتونم از bindParam تو fulltext search استفاده کرد

    این لینک رو ببینید
    http://stackoverflow.com/questions/1...ltext-searches

  3. #3
    کاربر دائمی
    تاریخ عضویت
    بهمن 1392
    محل زندگی
    Earth
    پست
    144

    نقل قول: نمیتونم از bindParam تو fulltext search استفاده کرد

    ممنون از لطف شما دوست گرامی
    این لینک رو قبل از تاپیک با سرچ پیدا کرم ولی فکر نکنم این دقیق جواب سوال باشه.

    مشکل ما با وجود کوتیشن نیست. چون تو کد اول که گذاشتم حتی با کوتیشن هم کار میکنه کد. مشکل اینه که وقتی bindParam استفاده نکنیم در برابر تزریق کوئری مقاوم نیست.

    حالا دو تا حالت داره:
    اگه تابع quote به تنهایی امنیت ایجاد میکنه (که بعیده چون انگار فقط دوتا کوتیشن میذاره رو استرینگ) و جایگزینی برای bindParam هست که خب هیچی مشکل حل شد.

    اما اگه نیست کد ما همچنان آسیب پذیره.

    حالا سوال اینه که چطور هم عبارت ورودی فیلتر شه هم کد به درستی کار کنه؟
    اگر هم من اشتباه فهمیدم این لینک stackoverflow رو ممنون میشم توضیح بفرمایید

    تشکر از شما

  4. #4
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

    نقل قول: نمیتونم از bindParam تو fulltext search استفاده کرد

    دوست عزیز ، توی Stackoverflow کامل توضیح داده.

    این مشکل توی نسخه های قدیمی MySQL هست و مشکل این هست که AGAINST فقط CONSTANT STRING میگیره و نه Query Parameter. پس شما باید حتما inline بنویسین نه پارامتریک ! (قدیمی منظورم ۲۰۱۳ یعنی ۴ سال پیشه)
    در مورد امنیت quote هم خود سایت php.net میگه :

    PDO::quote() places quotes around the input string (if required) and escapes special characters within the input string, using a quoting style appropriate to the underlying driver.

    در واقع این متد شبیه به mysqli_real_escape_string عمل میکنه اما کاملا واضح هست که استفاده از prepare و bind کردن پارامتر ها کاملا توصیه میشه تا escape کردن ! اما به خاطر داشته باش همین escape هم بالا ۹۹ درصد جلوی injection را میگیره مگر در موراد خاص که از حوصله این مطلب خارجه !

    برای رفع مشکلت و استفاده از prepare بهتره از mysql 5.5.31 به بعد ! یا بهتر از اون Maria DB استفاده کنی !

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

  1. سوال: روشی وجود داره که از نوع داده String به جای PAnsiChar یا Char تو توابع Api استفاده کرد.
    نوشته شده توسط S30S60 در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 1
    آخرین پست: چهارشنبه 05 آبان 1389, 09:26 صبح
  2. چگونه میتوان از کریستال ریپورت در دلفی استفاده کرد
    نوشته شده توسط prog_2005 در بخش گزارش سازی با Crystal Report
    پاسخ: 1
    آخرین پست: جمعه 03 خرداد 1387, 14:20 عصر
  3. آیا از API میتوان درون فرم استفاده کرد
    نوشته شده توسط ebrahimhoze در بخش ASP.NET Web Forms
    پاسخ: 0
    آخرین پست: شنبه 21 مهر 1386, 14:29 عصر
  4. چگونه می توان از اکتیوکس یاهو در دلفی استفاده کرد
    نوشته شده توسط vahid64 در بخش کامپوننت های سایر شرکت ها، و توسعه کامپوننت
    پاسخ: 3
    آخرین پست: سه شنبه 28 آذر 1385, 07:25 صبح
  5. آیا میشه dll ساخت که تو وب بشه استفاده کرد
    نوشته شده توسط tc1000 در بخش VB.NET
    پاسخ: 3
    آخرین پست: پنج شنبه 21 اردیبهشت 1385, 09:01 صبح

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

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