<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Mohamad Nowrozie</title>
        <link>https://virgool.io/feed/@mohamadnowrozie</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-17 02:05:16</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/4531008/avatar/gzhzG4.jpg?height=120&amp;width=120</url>
            <title>Mohamad Nowrozie</title>
            <link>https://virgool.io/@mohamadnowrozie</link>
        </image>

                    <item>
                <title>نگاهی ساده به JSONP</title>
                <link>https://virgool.io/@mohamadnowrozie/%D9%86%DA%AF%D8%A7%D9%87%DB%8C-%D8%B3%D8%A7%D8%AF%D9%87-%D8%A8%D9%87-jsonp-pylsowffnd2g</link>
                <description>مقدمهدر وب، یکی از مهمترین چالشها همیشه ارتباط بین دامنههای مختلف بوده. مرورگرها برای حفظ امنیت کاربر، قانونی به نام Same-Origin Policy دارند که اجازه نمیدهد یک سایت بهصورت مستقیم به منابع سایتهای دیگر درخواست بفرستد.در گذشته، زمانی که هنوز مفهومی به نام CORS وجود نداشت، این محدودیت تبدیل به یک مشکل جدی برای برنامهنویسها شد. نیاز به دریافت داده از دامنههای دیگر وجود داشت، اما مرورگر اجازه نمیداد. دقیقاً در همین نقطه بود که راهحلی خلاقانه به نام JSONP بهوجود آمد.Same-Origin Policy چیست؟Same-Origin Policy یک قانون امنیتی در مرورگر است که میگوید:اسکریپتهای اجراشده در یک دامنه، فقط اجازه دسترسی به منابع همان دامنه را دارند.منظور از «Origin» ترکیب این سه مورد است:پروتکل (http / https)دامنهپورتاگر یکی از اینها متفاوت باشد، مرورگر درخواست AJAX را بلاک میکند.نکته مهم اینجاست که این محدودیت برای درخواستهای AJAX اعمال میشود، نه برای تمام منابع.ایدهی شکلگیری JSONPبرنامهنویسها متوجه یک نکتهی جالب شدند:تگ  شامل محدودیت Same-Origin Policy نمیشود.یعنی مرورگر بدون هیچ اعتراضی میتواند یک فایل جاوااسکریپت را از هر دامنهای دانلود و اجرا کند. همین تفاوت، پایهی اصلی JSONP شد.ایده این بود:بهجای گرفتن «داده»کاری کنیم سرور «کد جاوااسکریپت» برگرداندو مرورگر آن کد را اجرا کندJSONP چیست؟روشی قدیمی برای دریافت داده از دامنهای دیگر است که از قابلیت اجرای تگ  سوءاستفاده (یا بهتر بگوییم استفادهی خلاقانه) میکند.در JSONP:داده بهصورت JSON استاما داخل یک تابع جاوااسکریپت پیچیده میشودبه این پیچیدن داده داخل تابع، Padding گفته میشود.ساختار پاسخ در JSONPدر حالت عادی، پاسخ سرور به این شکل است:{ &quot;name&quot;: &quot;Ali&quot;, &quot;age&quot;: 25 }اما در JSONP، پاسخ بهصورت زیر است:callbackFunction({
  &quot;name&quot;: &quot;Ali&quot;,
  &quot;age&quot;: 25
});
این پاسخ:JSON خالص نیستبلکه یک کد جاوااسکریپت معتبر استکه هنگام لود شدن، اجرا میشودJSONP چگونه کار میکند؟ (مرحلهبهمرحله)1. سمت کلاینتکلاینت یک تابع callback تعریف میکند:function handleData(data) {
  console.log(data);
}
سپس یک تگ اسکریپت میسازد:&lt;script src=&quot;https://api.example.com/data?callback=handleData&quot;&gt;
2. سمت سرورسرور:مقدار callback را از Query String میخواندداده را داخل همان تابع میپیچدو کد جاوااسکریپت برمیگرداندhandleData({
  &quot;name&quot;: &quot;Ali&quot;,
  &quot;age&quot;: 25
});
3. سمت مرورگرمرورگر:فایل اسکریپت را دانلود میکندکد را اجرا میکندتابع callback اجرا میشودداده در اختیار کلاینت قرار میگیردمثال ساده از JSONPHTML
  function showUser(user) {
    alert&#40;user.name&#41;;
  }


&lt;script src=&quot;https://example.com/user?callback=showUser&quot;&gt;
پاسخ سرورshowUser({ &quot;name&quot;: &quot;Sara&quot; });محدودیتهای JSONPراهحل هوشمندانهای بود، اما محدودیتهای جدی داشت:فقط از متد GET پشتیبانی میکندامکان ارسال Body وجود نداردمدیریت خطا (status code) نداردکنترل روی تایماوت و شکست درخواست سخت استمشکلات امنیتی JSONPاجرای مستقیم کد از دامنهی خارجیامکان تزریق کد مخربخطر بالای XSSنیاز به اعتماد کامل به سرور مقابلدر واقع با JSONP، شما اجازه اجرای هر کدی را به یک دامنهی دیگر میدهید.جمعبندی و برداشت شخصیبرداشت شخصی من از JSONP:JSONP یک راهحل خلاقانه برای محدودیتهای قدیمی وب بودبیشتر شبیه یک هک هوشمندانه عمل میکردیادگیری آن برای درک معماری مرورگر و تاریخ وب مهم استاما در دنیای امروز، CORS راهحل استاندارد و امنتر است</description>
                <category>Mohamad Nowrozie</category>
                <author>Mohamad Nowrozie</author>
                <pubDate>Tue, 30 Dec 2025 11:58:55 +0330</pubDate>
            </item>
                    <item>
                <title>نگاهی ساده به JWT | برداشت شخصی من</title>
                <link>https://virgool.io/@mohamadnowrozie/%D9%86%DA%AF%D8%A7%D9%87%DB%8C-%D8%B3%D8%A7%D8%AF%D9%87-%D8%A8%D9%87-jwt-%D8%A8%D8%B1%D8%AF%D8%A7%D8%B4%D8%AA-%D8%B4%D8%AE%D8%B5%DB%8C-%D9%85%D9%86-oykpflseapuj</link>
                <description>مقدمهاحراز هویت یکی از بخش‌های مهم هر سیستم یا وب‌سایته. یعنی سیستم بفهمه تو همونی هستی که می‌گی هستی.قبلاً این کار با Session انجام می‌شد: بعد از لاگین، سرور اطلاعات کاربر لاگین‌کرده رو نگه می‌داشت و هر درخواست رو بررسی می‌کرد. اما با افزایش تعداد کاربران، ذخیره‌سازی Session برای سرور مشکل‌ساز شد و مقیاس‌پذیری سخت می‌شد.اینجا بود که ایده‌ی Token به وجود اومد: به جای اینکه سرور وضعیت کاربر رو نگه داره، خود کاربر یه مدرک همراهش داشته باشه که قابل بررسی باشه. یکی از انواع معروف این توکن‌ها JWT یا JSON Web Token است.JWT چیست؟یه توکن متنیه که اطلاعات رو به صورت JSON نگه می‌داره و برای احراز هویت کاربر استفاده می‌شه.تفاوت اصلی با Session:Session: سرور وضعیت رو نگه می‌دارهJWT: سرور وضعیت کاربر رو ذخیره نمی‌کنه، همه اطلاعات لازم داخل خود توکنهساختار JWTJWT از سه بخش تشکیل شده که با نقطه (.) از هم جدا می‌شن:xxxxx.yyyyy.zzzzzHeader:شامل اطلاعات توکن و الگوریتم امضاسرور می‌فهمه چطور توکن رو بررسی کنهPayload:اطلاعات کاربر + زمان انقضا (exp)مثال: user_id, نقش کاربر، تاریخ انقضانکته مهم: Payload رمزنگاری نشده، یعنی هر کسی که توکن داشته باشه می‌تونه محتواشو ببینه. پس اطلاعات حساس داخلش نذارید.Signature:امضا با کلید خصوصی سرور (Secret Key) ساخته می‌شهوقتی توکن برمی‌گرده سرور دوباره امضا رو محاسبه می‌کنه و بررسی می‌کنه که Payload تغییر نکرده باشهبه این ترتیب سرور متوجه دستکاری توکن می‌شه بدون اینکه وضعیت کاربر رو نگه داشته باشه.چطور JWT کار می‌کند؟مرحله به مرحلهلاگین کاربر: یوزرنیم و پسورد ارسال می‌کنهساخت JWT توسط سرور:سرور اطلاعات کاربر + زمان انقضا رو داخل Payload می‌ذارهSignature با Secret Key ساخته می‌شهارسال توکن به کاربر: معمولاً تو هدر Authorization: Bearer &lt;JWT&gt;درخواست‌های بعدی: کاربر JWT رو همراه هر درخواست می‌فرستهاعتبارسنجی سرور:بررسی امضابررسی زمان انقضاتصمیم‌گیری اجازه یا عدم اجازهنکته: سرور هیچ Session یا وضعیت کاربر رو نگه نمی‌داره، فقط قوانین و کلید امضا رو می‌دونه.زمان انقضا و امنیتExp: مشخص می‌کنه توکن تا چه زمانی معتبرهJWT به خودی خود امن نیست، فقط اگر دست کسی نیفته و در مکان امن ذخیره بشه می‌تونه امن باشهروش‌های امن ذخیره:HttpOnly Cookieارسال فقط روی HTTPSهر توکن طول عمر کوتاه داشته باشه، امنیت بیشترهبرای طولانی‌ترها از Refresh Token استفاده می‌کنیمExp: مشخص می‌کنه توکن تا چه زمانی معتبرهJWT به خودی خود امن نیست، فقط اگر دست کسی نیفته و در مکان امن ذخیره بشه می‌تونه امن باشهروش‌های امن ذخیره:HttpOnly Cookieارسال فقط روی HTTPSهر توکن طول عمر کوتاه داشته باشه، امنیت بیشترهبرای طولانی‌ترها از Refresh Token استفاده می‌کنیماشتباهات رایج درباره JWTJWT = امنیت کامل نیستJWT فقط ابزار احراز هویته، امنیت کامل به پیاده‌سازی بستگی دارهاطلاعات داخل JWT رمزنگاری نشدهPayload رو هرکسی می‌تونه ببینهJWT جلوی CSRF/XSS رو نمی‌گیرهنحوه ذخیره و ارسال مهمهJWT همیشه بهترین انتخاب نیستبرای سیستم‌های ساده Session بهتره، JWT بیشتر برای API و Microservice مناسب‌ترهجمع‌بندی و برداشت شخصیبرداشت خودم از JWT:یه ابزار ساده و مفید برای احراز هویت تو سیستم‌های مدرنStateless بودنش باعث می‌شه سرور سبک باشه و مقیاس‌پذیری راحت‌تر باشهولی امنیتش کاملاً وابسته به کلید امضا، زمان انقضا و محل ذخیره توکن هستاگر این اصول رعایت بشه، یه روش امن و کارآمدهبزرگ‌ترین اشتباه اینه که فکر کنیم چون JWT امضا داره، همه چیز امنه. کلید، محل ذخیره و مدیریت عمر توکن خیلی مهمه.</description>
                <category>Mohamad Nowrozie</category>
                <author>Mohamad Nowrozie</author>
                <pubDate>Mon, 29 Dec 2025 22:24:10 +0330</pubDate>
            </item>
            </channel>
</rss>