• ٢ هفته پیش @tilkacoder به بحث پیدا کردن حفره امنیتی جواب داد.

    این در واقع لیست مواردی هست که باید برای شروع یادبگیری :‌

    1. جمع آوری اطلاعات
    2. بررسی تنطیمات، شناسه و تست اعتبار سنجی Authentication
    3. یادگیری باگ های مختلف مانند :تزریق Injection , XXE, XSS و ...
    4. بررسی ساختار داده ها، نحوه انتقال و پردازش داده
    5. استفاده از اکسپلویت ها و ابزارهای مختلف

    این موارد رو یادگرفتن زمان بر هست ولی باید حتما با این مفاهیم آشنا باشید.

    سعی میکنم یک مقاله در این رابطه بنویسم که بتونید راه درستی انتخاب کنید ، به علت گستردگی و پیچیده بودن بعضی از موارد توضیح و پیشنهاد در یک پاسخ کار درستی به نظرم نمیرسه.

  • ٢ هفته پیش @tilkacoder به بحث پیدا کردن حفره امنیتی جواب داد.

    زمینه بسیار گسترده ای هست و محدود نیست مثل برنامه نویسی

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

    1. درک مفاهیم پایه ای شبکه : فرض کنید میخواهید امنیت یک وبسایت را بررسی کنید، باید بدونید روی چه سروری قرار داره، سرور از چه پروتکل هایی استفاده میکنه و ... .زمانی که بدونید از ssh در یک پورت خاص استفاده میشود میتوانید تست های مربوطه را انجام دهید (البته این یک مثال ساده و کوچیک هست)

    2. به یکی از زبان های اسکریپت نویسی مسلط باشید که python پیشنهاد میشه : اول از همه به شما کمک میکنه تا منطق برنامه نویسی هم داشته باشید و همچنین فرآیندها را خودکار کنید. علت پیشنهاد python این هست که اسکریپت های زیادی در این زمینه با استفاده از این زبان نوشته شده و یادگیری و برنامه نوشتن نسبتا ساده است.

    3. در رابطه با Open Web Application Security Project (OWASP) تحقیق کنید و ۱۰ مورد برتر سال را یادبگیرید.

    4. فراگیری مهندسی معکوس و ابزار های مرتبط و متد های مطرح در این زمینه

    این موارد بخشی کلی از مواردی بود که باید بدانید و این مسئله فراتر از این موارد هست.

  • ۵ ماه پیش @tilkacoder به بحث سوال در مورد چند متدد جواب داد.

    بله چرا نشه با استفاده از دستور زیر یک مدل میسازید به اسم ‍‍‍Post :

    php artisan make:model Post

    سپس در مسیر پروژه داخل دایرکتوری app فایل Post.php را باز کنید و یک متد در کلاس به شکل زیر اضافه کنید:

    public static function foo()
    {
            //...
    }
  • ۵ ماه پیش @tilkacoder به بحث سوال در مورد چند متدد جواب داد.

    در خط اول :

    User::has('posts')->get();

    تمامی کاربرانی که حداقل یک پست دارند بازیابی میشوند.

    در خط بعدی ‍eager loading صورت میگیره که در واقع یعنی با توجه به ارتباط کاربران با پست ها تمامی کاربران به همراه پست هاشون رو بازیابی میکنه ( به صورت عادی این اتفاق نمیوفته و در Eloquent با استفاده از eager loading اینکار رو انجام میدیم )

    زمانی که ما نیاز داریم در در متد has ( تمامی کاربرانی که حداقل یک پست دارند) شرط هایی اعمال کنیم از whereHas استفاده میکنیم که در اینجا تمامی پست هایی که تاریخ ساخت آنها بزرگتر از مقدار q هست ( البته این مقدار به نظرم اشتباه است و باید درست مقدار دهی بشه) نمایش داده میشه.

    تابع toarray هم مجموعه ای از داده ها که به آنها collection میگیم رو به صورت آرایه php در میاره (به طور مثال مقدار های بازیابی شده با استفاده از Eloquent رو در صورتی که به صورت collection باشه با استفاده از toArray به آرایه تبدیل میکنیم)

    در رابطه با متدto فکر میکنم یک متد تعریف شده توسط کاربر باشه.

  • ۵ ماه پیش @tilkacoder به بحث تفاوت zend server با apache server جواب داد.

    دقیقا با حرفت موافق هستم zend پیشرفت فوقالعاده ای داره و در آینده برای برنامه نویسا میتونه یک گزینه جدید تر و بهتر باشه برای مدیریت نه برای سرور(ولی مدیران به طور معمول سعی میکنن از ابزار های قدیمی که قبلا تجربه خودشون رو پس دادن رو استفاده کنن تا یک ابزار جدید با قابلیت بیشتر).

    apache به صورت کلی برای سیستم های بزرگ طراحی نشده (نمیگم نمیشه استفاده کرد ولی گزینه های خیلی بهتری هست که خدمات بهتری ارائه میکنند همچنین اگر به پروژه های بزرگ نگاه کنیم متوجه این حرف میشیم)

    اگر یه نگاه کلی به این مسئله کنیم میتونی تصمیم بهتری بگیری :

    1. جامعه ای که از apache استفاده میکنن بسیار زیادتر از ‍zend هست البته منظور من از نظر ابزار مدیریتی هست( در نتیجه منابع بیشتر + متخصص بیشتر )
    2. همانطور که خودت گفتی zend ابزار ها و قابلیت ها خیلی زیاد و کاربردی داره همچنین گواهی های zend در هر زمینه ای که خدمات ارائه میکنه معتبر هست و توسط شرکت های بزرگ پذیرفته میشه ( البته منظور خارج از ایران هست)
  • تمامی جواب های شما توی پاسخ اولیه ام وجود داره ولی اینکه کدوم یکی مناسب شما هست در ادامه بهش اشاره میکنم.

    البته راه های زیاد دیگه ای هم وجود داره.

    ببینید اینکه از چه روشی استفاده کنید تمام مربوط به محیط عملیاتی شما هست.

    روش api شاید برای شما مناسب نباشه (وجود ۲ وب سرور سبب اشغال شدن منابع میشه که با توجه به محیط عملیاتی شما بهتره اینکار انجام نشه)

    این اطلاعات توسط چه برنامه و یا افرادی مورد استفاده قرار میگیره.

    استفاده از هر یک راه حل ها مزایا و معایبی داره.

    انتخاب راه حل نامناسب ممکنه ناسازگاری داده و یا هدر رفت منابع رو به دنبال داشته باشه.

    برای پیشنهاد راه مناسب نیاز به شناخت بیشتر محیط عملیاتی و جنس داده هست.

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

    تا جایی که خاطرم هست شما با تنظیمات خود ‍gateway هم میتونید اینکار رو کنید.( به صورت مستقیم وارد پایگاه داده بشه و بعد از ورود اطلاعات برای خوندنش میتونید پایگاه داده رو در اختیار سیستم های دیگه قرار بدید )

  • sqlite از این عملیات پشتیبانی نمیکنه همچنین سطح دسترسی لازم برای اینکار به صورت ریموت به این شکل وجود نداره.

    راه های زیادی برای اینکه اینکار رو انجام بدی وجود داره :

    1. در صورت وجود شبکه فایل بین سیستم ها اشتراک گذاشته بشه.
    2. ساخت یک api برای انجام عملیات های دیتابیس روی سروری که فایل قرار داره.
    3. زمانی که نیاز به کار با دیتابیس هست فایل دریافت بشه و پس از اتمام کار مجددا روی سرور بارگذاری کنید.
    4. و ...

    به صورت مستقیم امکانش وجود نداره باید از یکی راه حل های جایگزین استفاده کنید

  • خدمت شما دوست عزیز :

    عکس از خطا

    عکس از خطا

    با انجام دادن کارهایی که در بالا توضیح دادم میتونید این خطا را برطرف کنید.

    فکر میکنم شما از postman به نحو صحیح استفاده نمیکنید برای همین هست در دیباگ به مشکل میخورید

    همانطور که در بالا توضیح دادم شما متد را در Route نوشته شده به صورت POST قرار دادید و امکان مشاهده در مرورگر به صورت GET نمیباشد ( برای این درخواست)

  • ۵ ماه پیش @tilkacoder به بحث هایلات کردن کلمات سرچ شده جواب داد.

    برای پیاده سازی سیستم سرچ نیازمند ابزار های زیادی هستید که دوست خوبم امیر تعدادی از آنها را نام برد.

    در رابطه با سوالی که پرسیدی باید بگم راهکار های زیاد و پبچیده ای برای اینکار وجود داره (پلاگین ها، کدهای نمونه و ...)

    یکی از ساده ترین روش ها این هست که کلمه مورد نظر را در اطلاعات بدست آمده ( با استفاده از ajax) جستجو کنید و بین ۲ تگ با یک کلاس خاص قرارش بدید

    نمونه کد

  • اگر خطایی براتون پیش نمیاد پس علت پرسش چیه ؟

    علت این FatalErrorException هم همانطور که نوشته شده این هست که نباید هیچگونه فاصله ای بین شروع تگ php و namespace باشه.

    در واقع کدتون از شکل زیر :

    <?php
    
    namespace App\Http\Middleware

    باید به شکل زیر تغییر پیدا کنه :

    <?php 
    namespace App\Http\Middleware
  • لطفا بخش شرایط و مقررات و همچنین بخش پرسش و پاسخ رو بخونید.

    اگر هم مشکلتون در رابطه با موضوعی با پاسخی حل میشه حتما به عنوان جواب سوال انتخابش کنید تا در آینده دوستان بتونن استفاده کنن.

    در رابطه با MethodNotAllowedHttpException باید بگم به احتمال زیاد شما صفحه را در مرورگر چک میکنید و یا با متد GET داده ها را ارسال میکنید.( من با پست ارسال کردم و مشکلی نبود)

    درضمن این قسمت از کد باید اصلاح بشه :

    if(! auth()->attempt($valiDate)){
                return response([
                    'data'=>'صحیح نیست',
                    'status'=>'error'
                ],403);
            }

    باید علامت بخش if (!auth()→attempt($valiDate)) { به if (!auth()->attempt($valiDate)) { تبدیل بشه.

    در واقع مشکل شما استفاده از نماد → به جای <- هست ( برای متوجه شدن مشکل از مارک دان استفاده نکردم)

    اطلاعات نمونه (ایمیل و پسورد جهت تست) قرار بدید هم بهتره.

  • ۵ ماه پیش @tilkacoder به بحث نحوه اتصال به دیتابیس سایت جواب داد.

    بله حتما

    همچنین باید encode صفحه و اطلاعات ارسال روی utf8 باشه.

    این مشکل حقیقتا خیلی ساده است فقط کافیه کمی سرچ کنی (به زبان فارسی کلی مقاله هست میتونه کمکت کنه) . درضمن مواردی که به ذهنت میرسه حتما تست کن شاید مشکلت حل بشه( هیچ اتفاقی نمیوفته)

  • ۵ ماه پیش @tilkacoder به بحث اختیاری کردن لینک جواب داد.

    باید مسیر به شکل زیر نوشته بشه (شما درست نوشتی):

    Route::post('/api_token/{city?}/', 'ControllerName@foo');

    بعد باید متد به شکل زیر تعریف بشه :

    public function foo($city = null)

    برای اینکه در متد POST csrf token مشکل ایجاد نکنه داخل فایل VerifyCsrfToken در فیلد except باید مقدارش به شکل زیر تغییر پیدا کنه :

    [
        '/api_token/*ٔ'
    ]
  • ۵ ماه پیش @tilkacoder به بحث نحوه اتصال به دیتابیس سایت جواب داد.

    شما میتونید برای پایگاه داده چندین کاربر تعریف کنید که هر کاربر سطح دسترسی های مخصوص به خودش رو داره.

    به طور مثال میتونیم یک کاربر ایجاد کنیم که تنها به یک دیتابیس دسترسی داشته باشه و یک کاربر تعریف کنیم که بتونه همه دیتابیس هارو مدیریت کنه. اینکه هر کاربر چه سطح دسترسی هایی داشته باشه توسط شما مشخص میشه. با کمی سرچ میتونید مثال های خوبی پیدا کنید.

    علت ثبت نشدن اطلاعات چیزهای مختلفی میتونه باشه باید مرحله به مرحله پیش برید تا مشکل پیدا بشه. اگر اطلاعات اصلا ثبت نمیشه دلایل مخصوص به خودش رو داره اگر اطلاعات به صورت ناقص ثبت میشه مشکلات خودش

    باید مرحله به مرحله به همراه تکه کد بررسی بشه.

  • ۵ ماه پیش @tilkacoder به بحث نحوه اتصال به دیتابیس سایت جواب داد.

    ممنون میشم اگر از مارک دان استفاده کنی.

    اگر که دیتابیس روی سروری که اسکریپت اجرا میشه هست خیر نیازی به تغییر آدرس سرور نیست ولی اگر روی سرور دیگه ای هست باید ای پی سرور مورد نظر رو قرار بدی.

    به طور معمول این خطا به ۲ دلیل رخ میده :

    1. کاربر پایگاه داده روی سرور وجود نداره
    2. کاربر دسترسی های لازم بهش داده نشده

    با استفاده از پنل هاستی که دارید میتونید کاربر ایجاد کنید و دسترسی های لازم رو بدید.

    برای استفاده از cli در mysql هم از دستور زیر میتونید استفاده کنید:

    ساخت کاربر:

    CREATE USER 'zahediha_pop'@'localhost' IDENTIFIED BY '123456789';
    

    اعطا دسترسی های لازم :

    GRANT ALL PRIVILEGES ON *.* TO 'zahediha_pop'@'localhost'
    WITH GRANT OPTION;
  • باید موارد مختلفی چک بشه.

    یک گام دیگه این هست که به مسیر bootstrap/cache بری و اگر فایل config.php وجود داشت به هر نامی که میخوای تغییر بدی

  • بعضی از سرویس دهندگان به دلایل امنیتی open_basedir را بر روی تنظیمات php فعال میکنند. ( به طور معمول اینکار را برای دسترسی هر کاربر تنها به فایل های خودش انجام میدهند)

    با ارسال تیکت میتونی بگی این مشکل را برات برطرف کنند ولی معمولا میتونید داخل پنل هاست در بخش PHP Settings مقدار open_basedir را برابر none قرار دهید .( اگر تنظیمات وجود نداشت یا براتون سخت بود تیکت بزنید براتون انجام میدن) قبل از بارگذاری بهتره از دستور زیر هم استفاده کنید :

    php artisan cache:clear

    حتما هم چک کنید که پوشه storage دسترسی کامل برای خواندن و نوشتن توسط اپ را داشته باشد.

  • HTML5 Geolocation در صورتی که gps وجود نداشته باشه بر اساس IP کار میکنه

    علت این اختلاف هم همین هست.

    اولین خروجی که پکت رو خارج میکنه اطلاعات رو اضافه میکنه در نتیجه موقعیت اون ثبت میشه.

    برای پیدا کردن موقعیت جغرافیایی با استفاده از IP در php از این افزونه میتونی استفاده کنی ولی این هم همون مشکل رو داره و موقعیت دقیق نمیده

  • اگر دستور مورد نظر به درستی فایل هارو دریافت کرده باشه میتونی با تغییر فایل webpack.mix.js اینکار را انجام بدی.(دیگه از bootstrap نباید استفاده نکنی)

    باید محتوا این فایل شبیه به زیر باشه :

    mix.js('resources/assets/js/app.js', 'public/js')
        .sass('resources/assets/sass/app.scss', 'public/css')
        .copy('node_modules/mdbootstrap/js', 'public/mdbootstrap/js')
        .copy('node_modules/mdbootstrap/css', 'public/mdbootstrap/css');

    برای استفاده ازش به صورت لوکال هم باید کد زیر را در layout اصلی خودت قرار بدی :

    <link href="{{'{{'}} mix('mdbootstrap/css/bootstrap.css') }}" rel="stylesheet">
    <link href="{{'{{'}} mix('mdbootstrap/css/mdb.css') }}" rel="stylesheet">

    و کد زیر را قبل از بسته شدن تگ body قرار بده :

    <script type="text/javascript" src="{{'{{'}} mix('mdbootstrap/js/jquery-3.3.1.min.js') }}"></script>
    <script type="text/javascript" src="{{'{{'}} mix('mdbootstrap/js/popper.min.js') }}"></script>
    <script type="text/javascript" src="{{'{{'}} mix('mdbootstrap/js/bootstrap.js') }}"></script>
    <script type="text/javascript" src="{{'{{'}} mix('mdbootstrap/js/mdb.js') }}"></script>

    بعد هم دستور

    npm run watch
  • ۶ ماه پیش @tilkacoder به بحث اپلیکیشن جواب داد.

    بله چرا که نه ولی شما باید دانش اولیه رو داشته باشی و بتونی سناریو مورد نظرت رو بنویسی و پیاده سازی کنی.

  • ۶ ماه پیش @tilkacoder به بحث اپلیکیشن جواب داد.

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

    به طور مثال ممکنه شما بخواید زمانی که کاربر روی نسخه موبایل دکمه ثبت را زد این عملیات انجام بشه در نتیجه شما با توجه به سیستم عامل موبایل کاربر باید برنامه رو بنویسید ( به طور مثال برای اندروید با جاوا میتونی همچین کاری رو انجام بدی )

    در قسمت بعد باید این مسئله رو در نظر بگیری میخوای از چه پرینتری استفاده کنی تا بتونی خروجی و کتابخانه مناسب رو پیدا کنی.

    برای اینکه متوجه حرفم بشی یه مثال میزنم :

    من توی یه برنامه تحت وب زمانی که قرار بود از Receipt Printer استفاده کنم با استفاده از js خیلی راحت میتونستم اینکار رو انجام بدم ولی بخاطر مشکلات و مسائلی که وجود داشت مجبور شدم از طریق php این کار رو انجام بدم. برای php با استفاده از کتابخانه escpos-php اینکار رو خیلی راحت انجام دادم.

    برای ارسال به پرینتر شما میتونی با هر زبان برنامه نویسی که بتونه اطلاعات روی پورت سریال و شبکه ارسال کنه این کار را انجام بدی.

  • کدت هیچ مشکلی نداره و جالبه بدونی موقعیت درستی هم نشون میده

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

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