<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های 3tayesh.mp</title>
        <link>https://virgool.io/feed/@m_57642479</link>
        <description>کد می‌زنم، اشتباه می‌کنم، یاد می‌گیرم؛</description>
        <language>fa</language>
        <pubDate>2026-06-15 21:34:33</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/4856252/avatar/rrSQ8Q.jpg?height=120&amp;width=120</url>
            <title>3tayesh.mp</title>
            <link>https://virgool.io/@m_57642479</link>
        </image>

                    <item>
                <title>درِ خانه باز است؛ هکرها در راهند!</title>
                <link>https://virgool.io/@m_57642479/%D8%AF%D8%B1%D9%90-%D8%AE%D8%A7%D9%86%D9%87-%D8%A8%D8%A7%D8%B2-%D8%A7%D8%B3%D8%AA-%D9%87%DA%A9%D8%B1%D9%87%D8%A7-%D8%AF%D8%B1-%D8%B1%D8%A7%D9%87%D9%86%D8%AF-xjmhqptatqit</link>
                <description>برنامه نویس‌ها سایت رو مثل یک خونه طراحی میکنن. خونه ورودی‌هایی داره مثل در یا پنجره(کادر جستجو، فرم لاگین و ...) وقتی برنامه نویس به در و پنجره‌ها قفل درست حسابی نزنه، هکر به راحتی وارد خونه میشه!معروف‌ترین نوع حمله SQL Injection هست. وقتی برنامه نویس ورودی کاربر رو بدون فیلتر کردن و به صورت مستقیم در دیتابیس قرار میده:&quot;SELECT * FROM users WHERE username = &#039;&quot; + $_GET[&#039;username&#039;] + &quot;&#039;&quot;;هکر به جای نام کاربری، کدی مثل &#039; OR &#039;1&#039;=&#039;1 می‌نویسه. دیتابیس فریب می‌خوره و فکر می‌کنه شرط درسته، پس تمام اطلاعاتِ هزاران کاربر (ایمیل‌ها، رمزهای هش شده و …) را به هکر تحویل می‌ده.امنیتِ وب فقط این نیست که «لینکِ مشکوک کلیک نکنی». امنیتِ وب اینه که سایت‌هایی که استفاده می‌کنی، «در و پنجره‌شان» (یعنی فرم‌ها و ورودی‌هایشان) محکم باشه.از کجا باید بفهمیم که این در بازه یا امنیت نداره؟درسته که ما نمی‌تونیم پشت‌صحنه‌ی کدها رو ببینیم، اما هکرها وقتی وارد میشن، معمولاً سایت رو کمی «گیج» می‌کنن. حواست به این موارد باشه:خطاهای عجیب و غریب:اگر در یک سایتِ معتبر، ناگهان با صفحه‌ای مواجه شدی که به جای محتوا، پر از نوشته‌های فنی و کدهای پیچیده (شبیه به Errorهای دیتابیس) بود، بلافاصله اون سایت رو ببند. این یعنی «درِ خانه» خرابه و کارمندِ سایت (برنامه‌نویس) نتونسته جلویِ تزریقِ کدهای هکر رو بگیره.آدرس‌های طولانی و بی‌معنی:وقتی روی لینکی کلیک می‌کنی، به آدرسِ بالای مرورگر (URL) نگاه کن. اگر آدرس یک سایتِ معمولی بود، اما بعد از اسم سایت، کلی کاراکترِ عجیب (مثل %27, SELECT, --) دیدی، این یک نشانه‌ی واضحه که شاید کسی داره سعی می‌کنه با «تزریق»، اون سایت رو هک کنه.تغییرِ رفتارِ سایت:اگر سایتی که همیشه ازش استفاده می‌کردی، ناگهان کند شده یا دکمه‌هاش درست کار نمی‌کنه، ممکنه کدهای تزریق شده در پس‌زمینه، دارن تمامِ قدرتِ سایت رو برایِ کارهای مخرب مصرف می‌کنن.۳ قانون طلایی برای اینکه «قفلِ خانه» شکسته نشه:حالا که فهمیدی چطور سایت‌های ناامن رو شناسایی کنی، این ۳ تا کار رو همیشه انجام بده تا حتی اگر سایت هک شده بود، تو آسیب نبینی:قانون اول: هیچ‌چیزِ ناخواسته‌ای رو دانلود نکن!اگر سایتی به تو پیشنهاد داد فایلی رو نصب کنی (حتی با اسم‌های وسوسه‌کننده مثل “بهینه‌ساز سرعت” یا “آنتی‌ویروس آنلاین”)، به هیچ عنوان نپذیر.قانون دوم: مرورگرت همیشه آپدیت باشه.مرورگرهایِ جدید (Chrome, Firefox, Edge) مثلِ نگهبان‌هایِ هوشمند هستن. وقتی سایتِ آلوده‌ای رو باز می‌کنی، اونا می‌فهمن و جلویِ اجرایِ کدهای تزریقی رو می‌گیرن. آپدیت نبودنِ مرورگر، یعنی باز کردنِ درِ خونه برایِ دزد.قانون سوم: اطلاعات حساس رو در سایت‌های مشکوک وارد نکن.اگر سایتی رفتارِ عجیب داشت (مثلاً خطاهای فنی می‌داد)، هیچ‌وقت شماره کارت یا رمزت رو اونجا وارد نکن. صبر کن تا مطمئن بشی مشکل حل شده.</description>
                <category>3tayesh.mp</category>
                <author>3tayesh.mp</author>
                <pubDate>Sat, 23 May 2026 11:40:28 +0330</pubDate>
            </item>
                    <item>
                <title>Redis چیست؟</title>
                <link>https://virgool.io/@m_57642479/redis-%DA%86%DB%8C%D8%B3%D8%AA-t6q9ivegunvd-t6q9ivegunvd</link>
                <description>Redis(Remote Dictionary Server ) یک پایگاه دادهٔ in-memory (در حافظهٔ RAM) و سیستم ذخیره‌سازی ساختار داده هست که بیشتر برای سرعت بسیار بالا استفاده می‌شه.در بیشتر دیتابیس‌ها داده روی دیسک ذخیره می‌شه. اما Redis داده‌ها را در RAM نگه می‌داره، بنابراین خواندن و نوشتن داده‌ها بسیار سریع است (در حد microseconds).ساختار داده‌هایی که Redis پشتیبانی می‌کندRedis فقط key-value ساده نیست؛ چند نوع ساختار داده دارد:String → ساده‌ترین نوع (key → value)List → لیست مرتبSet → مجموعه بدون تکرارSorted Set (ZSet) → مجموعه مرتب با امتیازHash → شبیه object یا dictionaryBitmap / HyperLogLog / Stream → برای کاربردهای خاصنکته مهمچون Redis در RAM هست:خیلی سریعهاما حافظه RAM محدودتر و گران‌تر از دیسک هستبا این حال Redis می‌تواند داده را روی دیسک هم persist کند تا بعد از ری‌استارت از بین نرود.</description>
                <category>3tayesh.mp</category>
                <author>3tayesh.mp</author>
                <pubDate>Tue, 19 May 2026 07:50:08 +0330</pubDate>
            </item>
                    <item>
                <title>Facade در لاراول</title>
                <link>https://virgool.io/@m_57642479/facade%D8%AF%D8%B1-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-nrmj0ddqdrcr</link>
                <description>تعریف ساده از Facade:Facade امکان دسترسی ساده، خوانا و استاتیک‌نما به سرویس‌های ثبت‌شده در Service Container را به ما میدهد.اگه نمیدونی سرویس کانیتنر چی هست بهتره این پست رو Service Container یه نگاهی بندازی.فرض کن:Cache::get(&#039;key&#039;);در ظاهر انگار داری یک متد استاتیک صدا می‌زنی، اما در واقع لاراول پشت صحنه از Service Container سرویس cache را می‌گیرد و متد get را روی آن اجرا می‌کند. اگر Facade نبود باید اینجوری مینوشتیم:$cache = app(&#039;cache&#039;);$cache-&gt;get(&#039;key&#039;);هدف:ساده‌سازی دسترسی به سرویس‌هاخواناتر شدن کدکوتاه‌تر شدن سینتکسپنهان کردن پیچیدگی Service Containerامیدوارم براتون مفید بوده باشه✨</description>
                <category>3tayesh.mp</category>
                <author>3tayesh.mp</author>
                <pubDate>Mon, 18 May 2026 11:10:11 +0330</pubDate>
            </item>
                    <item>
                <title>درک Service Container و Dependency Injection</title>
                <link>https://virgool.io/@m_57642479/%D8%AF%D8%B1%DA%A9-service-container-%D9%88-dependency-injection-ic7for8apg2z</link>
                <description>DI و Service Container ستون فقرات لاراول حساب میشن. برای اینکه این دو رو کامل یاد بگیریم از پایه شروع میکنیم. به کد پایین دقت کن:یک کلاسی داریم به اسم UserService که داخلش متد ایجاد یوزر وجود داره. این کلاس برای کار کردن به کلاس دیگه ای نیاز داره. آفرین کلاس Database و Mailer!حالا اشکال این کد چیه؟ بیا بررسی کنیمCoupling شدید(یعنی کلاس‌ها خیلی به هم وابسته‌ان)Test کردن سخت می‌شهنمی‌توانیم Database را Mock کنیم(Mock یعنی یک نسخه fake یا شبیه‌سازی‌شده از یک سرویس.)برای رفع این اشکالات باید از Dependency Injection استفاده کنیم.یعنی وابستگی‌های یک کلاس را از بیرون به آن تزریق کنیم، نه اینکه خودش آن‌ها را بسازه.به عبارت دیگر:کلاس‌ها نباید وابستگی‌های خود را ایجاد کنند، بلکه باید آن‌ها را دریافت کنند.بدون DI:با DI:فرقش رو دیدی؟ وابستگی از بیرون به کلاس تزریق میشه.سه نوع DI داریمConstructor Injection: رایج ترین روش که در مثال بالا مشاهده کردیم. لاراول به صورت اتوماتیک PaymentGatewayرا می‌سازه.Method Injection: وابستگی در متد تزریق می‌شه.Property Injection: که کمتر مورد استفاده قرار میگیره.بریم سراغ Service ContainerService Container در لاراول یک سیستم مدیریت وابستگی‌ها هست که وظیفه ساخت و resolve کردن کلاس‌ها را داره.به آن می‌گویند:IoC ContainerDependency Containerکار Service Containerسه کار اصلی انجام می‌دهد:1️⃣ ساخت object ها2️⃣ مدیریت وابستگی‌ها3️⃣ تزریق dependency هایه مثال دیگهوقتی میگیم:لاراول این کارها را می‌کنه:می‌بیند UserService چه dependency داره؟می‌فهمه که Mailer نیاز استMailer را می‌سازهآن را داخل constructor می‌گذارهاصلا سرویس کانتینر چجوری کار میکنه؟تو هسته لاراول یه کانینتر وجود داره که تو کل اپ ما استفاده میشه.Illuminate\Container\Containerیه وقتایی پیش میاد لاراول نمیدونه دقیقا باید چی بسازه. مثلا وقتی از interface استفاده میکنیم.و دو implementation داریم:StripePaymentPaypalPaymentالان لاراول گیج میشه نمیدونه کدوم کلاس رو باید بسازه. میایم با Binding(اتصال داده) این مشکل رو رفع میکنیم. حالا بگو چجوری؟ با تعریف کردن در Service Providerحالا هرجا PaymentGateway خواسته شود:لاراول StripePayment را می‌سازه.Service Provider جایی هست که همه bindingها، Serviceها و configuration داخلش ثبت میشن.بهتره اینم بدونیچرخه Dependency Injection در لاراولزمانی که درخواست HTTP میاد:Route اجرا می‌شهController ساخته می‌شهContainer constructor را بررسی می‌کنهdependency ها resolve می‌شنobject ساخته می‌شهامیدوارم براتون مفید بوده باشه✨</description>
                <category>3tayesh.mp</category>
                <author>3tayesh.mp</author>
                <pubDate>Mon, 18 May 2026 08:50:19 +0330</pubDate>
            </item>
            </channel>
</rss>