CodeVerse | دنیای برنامه نویسان
1.06K subscribers
65 photos
6 videos
72 links
💻 ترفند برنامه نویسی PHP & JavaScript
🚀 آموزش وردپرس
💡 ترفندهای کاربردی
🤖 هوش مصنوعی و تکنولوژی
👨‍💻آموزش • ترفند • پروژه

@ideveloperweb_z |ارتباط
Download Telegram
🚨 اگه روی سایتت All-in-One WP Migration داری، همین امروز نسخه‌ش رو چک کن!

یه آسیب‌پذیری جدی با شناسه CVE-2026-19949 در افزونه All-in-One WP Migration and Backup پیدا شده.

قسمت ترسناک ماجرا؟

این باگ فقط یه خطای ساده نیست؛ می‌تونه در شرایط خاص از یک SQL Injection به اجرای کد روی سرور و در نهایت Takeover کامل سایت منجر بشه. 😐

این افزونه بیش از ۵ میلیون نصب فعال داره و طبق گزارش‌های امنیتی، تعداد زیادی از سایت‌ها هنوز Patch نشدن.

پس اگر روی پروژه‌هات از این افزونه استفاده می‌کنی:

1️⃣ نسخه افزونه رو بررسی کن.
2️⃣ اگر آپدیت امنیتی داری، قبل از هر چیز Backup بگیر.
3️⃣ افزونه رو به نسخه اصلاح‌شده 7.110 یا بالاتر ارتقا بده.
4️⃣ اگر سایت قبلاً آسیب‌پذیر بوده، فقط Update کردن کافی نیست؛ لاگ‌ها، کاربران Administrator و فایل‌های مشکوک رو هم بررسی کن.

💡 نکته‌ای که باید همیشه یادت بمونه:

اینکه Backup Plugin خودش نباید تبدیل به نقطه ضعف سایت بشه

@CodeVerse_dev
👍6❤2
🔥 یه ترفند PHP که کد پروژه‌ات رو خیلی تمیزتر می‌کنه

فرض کن یه تابع داری که فقط باید با یک نوع خاص از داده کار کنه.

روش قدیمی اینه که داخل تابع مدام چک کنی:

if (!is_string($value)) {
throw new Exception('Invalid value');
}

ولی در PHP مدرن می‌تونی این قرارداد رو از همون اول مشخص کنی:

function generateSlug(string $title): string
{
return strtolower(str_replace(' ', '-', $title));
}

حالا تابع رسماً اعلام می‌کنه:

ورودی باید string باشه و خروجی هم string.

این موضوع وقتی پروژه بزرگ میشه خیلی مهم‌تر میشه.

چون به جای اینکه هر توسعه‌دهنده مجبور باشه حدس بزنه:

«این تابع چه چیزی می‌گیره؟ چی برمی‌گردونه؟»

خود Signature تابع جواب رو میده.

حتی می‌تونی برای ساختارهای پیچیده‌تر از:

int
string
bool
array
object
Union Types
Nullable Types

استفاده کنی.

💡موضوع Type Hint فقط برای جلوگیری از Error نیست؛ یه جور قرارداد بین بخش‌های مختلف کده.

هرچی پروژه بزرگ‌تر بشه، این قراردادها ارزش بیشتری پیدا می‌کنن.


@CodeVerse_dev
🔥6❤2
چرا کپی کردن یک Object در JavaScript همیشه کپی واقعی نیست؟ 🤔

این کد رو ببین:

const user = {
name: "Ahmad",
settings: {
theme: "dark"
}
};

const copy = { ...user };

copy.name = "Ali";
copy.settings.theme = "light";

console.log(user.name);
// Ahmad

console.log(user.settings.theme);
// light 😐

چی شد؟!

ما که user رو کپی کرده بودیم!

مشکل اینجاست که Spread Operator فقط یک Shallow Copy می‌سازه.

یعنی لایه اول Object کپی میشه، ولی Objectهای تو‌در‌تو همچنان به همان Reference قبلی اشاره می‌کنن.

پس:

copy.settings === user.settings
// true

اما برای کپی عمیق می‌تونی از ()structuredClone استفاده کنی:

const copy = structuredClone(user);

copy.settings.theme = "light";

console.log(user.settings.theme);
// dark

حالا:

copy.settings === user.settings
// false

🔥 این تفاوت توی پروژه‌هایی که با State، API Response یا Objectهای تو‌در‌تو کار می‌کنی خیلی مهمه.

نکته حرفه‌ای:

تابع JSON.parse(JSON.stringify(obj)) هم یک روش قدیمی برای Deep Copy محسوب میشه، اما محدودیت‌های مهمی داره و برای همه داده‌ها مناسب نیست.

اگر با JavaScript حرفه‌ای کار می‌کنی، ()structuredClone رو بشناس.

@CodeVerse_dev
👍5❤3
چرا null و undefined یکی نیستن؟ 🤔

خیلی‌ها فکر می‌کنن هر دو یعنی «هیچی»، ولی در JavaScript تفاوت مهمی دارن.

حالا undefined معمولاً یعنی یک مقدار هنوز تعیین نشده:

let username;

console.log(username);
// undefined

اما null معمولاً یعنی خود برنامه‌نویس عمداً نبودن مقدار رو مشخص کرده:

let user = null;

یعنی:

فعلاً کاربری وجود نداره.

حالا یه نکته جالب:

typeof undefined
// "undefined"

typeof null
// "object"

این رفتار null یکی از باگ‌های تاریخی JavaScript محسوب میشه و هنوز هم به همین شکل باقی مونده. 😅

اما قسمت مهم‌تر:

null == undefined
// true

null === undefined
// false

چون == تبدیل نوع انجام میده، ولی === هم نوع و هم مقدار رو بررسی می‌کنه.

توی پروژه واقعی چی؟

وقتی داده‌ای از API می‌گیری، ممکنه با هر دو مواجه بشی:

if (user.name === undefined) {
// فیلد name اصلاً وجود نداره
}

if (user.name === null) {
// فیلد وجود داره ولی مقدارش عمداً خالیه
}

البته در پروژه‌های واقعی بهتره قرارداد API مشخص کنه که برای «مقدار خالی» از null استفاده میشه یا نبودن property.

🔥 خلاصه:

undefined → مقدار تعیین نشده / property ممکنه وجود نداشته باشه

null → عمداً مقدار خالی

و برای مقایسه دقیق:

=== 

رو انتخاب کن.

@CodeVerse_dev
👍7❤1
🧩 چرا بعضی تغییرات وردپرس فقط وقتی لاگین هستی دیده میشن؟

این یکی از باگ‌های عجیبیه که تو پروژه‌های وردپرسی زیاد دیده میشه.

مدیر سایت وارد WordPressـه و همه‌چیز عالیه.

ولی وقتی Logout می‌کنی:

> طراحی خراب میشه! 😐

یکی از مظنون‌های اصلی Cacheـه.

ممکنه وقتی لاگین هستی، صفحه از Cache سرو نشه و وردپرس نسخه تازه رو تولید کنه.

اما کاربر عادی نسخه Cached قدیمی رو ببینه.

برای همین وقتی تغییر مهمی در ظاهر سایت میدی، فقط خودت رو بررسی نکن.

این سناریوها رو هم تست کن:

Logged in
Logged out
Incognito
Mobile
Desktop

و اگر CDN یا Page Cache داری، Cache مربوط به صفحه رو هم بررسی کن.

یه نکته مهم‌تر:

«برای من درست نمایش داده میشه» به معنی «برای کاربر هم درست نمایش داده میشه» نیست.

خصوصاً در وردپرس که ممکنه مسیر نمایش کاربران لاگین‌شده و مهمان کاملاً متفاوت باشه.

@CodeVerse_dev
👍5❤2
🌐 چرا یک سایت حرفه‌ای همیشه یک Loading Spinner نشون نمی‌ده؟

وقتی درخواست طول می‌کشه، اولین راه‌حل خیلی از طراح‌ها اینه:

⏳ Loading...

ولی UX مدرن همیشه این نیست.

فرض کن صفحه‌ای داری که ساختارش مشخصه، ولی اطلاعاتش هنوز از API نیومده.

به جای اینکه کل صفحه رو قفل کنی:

        Loading...

می‌تونی از Skeleton UI استفاده کنی:

┌─────────────────────┐
│ █████████████ │
│ █████████████████ │
│ │
│ ████████ │
│ ███████████████ │
└─────────────────────┘

کاربر از همون لحظه اول می‌فهمه ساختار صفحه چیه و منتظر محتوا می‌مونه.

اما یه نکته UX مهم:

Skeleton نباید صرفاً یک انیمیشن تزئینی باشه.

اگر قرار باشه ۵ ثانیه Skeleton نمایش بدی و بعد محتوا بیاد، فقط تأخیر رو قشنگ‌تر کردی. 😄

هدفش اینه که درک کاربر از زمان انتظار بهتر بشه، نه اینکه Performance واقعی رو پنهان کنیم.

گاهی بهترین UX این نیست که کاری کنی کاربر منتظر نماند؛

کاری کن بداند دقیقاً منتظر چه چیزی است.


@CodeVerse_dev
👍7❤3
🔐 وقتی LLM وارد Web App می‌شود، مدل تهدید هم تغییر می‌کند.

قبلاً امنیت وب را بیشتر با تهدیدهایی مثل:

XSS
SQL Injection
CSRF
SSRF

می‌شناختیم.

اما وقتی یک LLM یا AI Agent را وارد Application می‌کنیم، یک لایه جدید ایجاد می‌شود:

Prompt Injection

مشکل اینجاست که ورودی کاربر دیگر فقط یک Input ساده نیست؛ ممکن است روی تصمیم‌گیری Agent تأثیر بگذارد.

مثلاً:
User Input
↓
LLM
↓
Tool / API
↓
Database

اگر Agent اجازه اجرای Tool داشته باشد، یک ورودی مخرب می‌تواند از مرز «متن» عبور کرده و روی عملیات واقعی سیستم اثر بگذارد.

به همین دلیل در معماری‌های AI-enabled باید علاوه بر Validation سنتی، به مواردی مثل:

🛡️ محدودسازی Toolها
🛡️ کنترل Permission
🛡️ جداسازی داده و دستور
🛡️ اعتبارسنجی خروجی
🛡️همچنین Runtime Monitoring

هم فکر کرد.

امنیت Web Appهای مجهز به AI دیگر فقط مسئله‌ی Backend یا Frontend نیست؛

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


@CodeVerse_dev
🔥6❤2
دیگه برای هر Property چک if ننویس! 😎

فرض کن اطلاعات کاربر از API اومده:

const user = {
profile: {
address: {
city: "Baku"
}
}
};

حالا می‌خوای شهر رو بگیری:

console.log(user.profile.address.city);

فعلاً مشکلی نیست.

اما اگر address وجود نداشته باشه:

const user = {
profile: {}
};

console.log(user.profile.address.city);

💥 خطا می‌گیری:

Cannot read properties of undefined

قبلاً شاید اینطوری حلش می‌کردیم:

if (
user &&
user.profile &&
user.profile.address
) {
console.log(user.profile.address.city);
}

ولی JavaScript یه راه تمیزتر داره:

console.log(user?.profile?.address?.city);

اگر هرکدوم از این Propertyها وجود نداشته باشه، به‌جای Error مقدار undefined برمی‌گرده.

---
ترکیبش با ?? خیلی خفنه 🔥

مثلاً:

const city =
user?.profile?.address?.city ?? "Unknown";

console.log(city);

اگر شهر وجود نداشته باشه:

Unknown

یعنی:

?. → اگر وجود نداشت، خطا نده.

?? → اگر مقدار null یا undefined بود، مقدار پیش‌فرض بده.

این ترکیب توی پروژه‌هایی که با API، JSON و داده‌های تو‌در‌تو کار می‌کنی واقعاً کاربردیه.

کد کمتر، شرط کمتر، خطای کمتر. 🚀

@CodeVerse_dev
❤5👍3
⚡ یک تفاوت مهم بین Code و Production Code

حالا Aiمی‌تواند یک Feature را در چند دقیقه برایت پیاده‌سازی کند.

اما این سؤال مهم‌تر است:
آیا می‌توانی با خیال راحت آن را وارد Production کنی؟
یک Feature واقعی فقط شامل این نیست:

Code → Done
بلکه:
Code
↓
Tests
↓
Review
↓
Security
↓
Observability
↓
Deployment
↓
Rollback

این موضوع با رشد Coding Agentها اهمیت بیشتری پیدا کرده است.
چون سرعت تولید کد بالا رفته، اما گلوگاه اصلی می‌تواند به بخش‌های دیگری منتقل شود:

• Review
• Testing
• Integration
• Security
• Deployment
• Monitoring
بنابراین معیار یک Agent خوب نباید فقط این باشد که:
«چند خط کد تولید می‌کند؟»

سؤال مهم‌تر این است:

«چقدر تغییر Production-Ready تحویل می‌دهد؟»


@CodeVerse_dev
👍6❤3
🤖 افزونه کرومAIPRM؛ پرامپت‌های آماده برای کار حرفه‌ای با هوش مصنوعی

اگه زیاد با ChatGPT کار می‌کنی، احتمالاً می‌دونی که نوشتن یک پرامپت خوب خودش یک مهارته!

ابزار AIPRM یک افزونه برای مرورگره که مجموعه بزرگی از Promptهای آماده رو در اختیار شما قرار می‌ده تا برای کارهای مختلف سریع‌تر به نتیجه برسی.

🔥 چه کاربردی داره؟

✅ استفاده از Promptهای آماده برای تولید محتوا
✅ کمک به سئو و تحقیق کلمات کلیدی
✅ ایده‌پردازی و نوشتن متن
✅ کمک به برنامه‌نویسی و تولید کد
✅ دسته‌بندی و جست‌وجوی Promptهای مختلف
✅ امکان استفاده از Promptهای ساخته‌شده توسط کاربران

💡 نکته جالب اینه که به‌جای اینکه هر بار از صفر شروع کنی، می‌تونی یک Prompt مناسب پیدا کنی، شخصی‌سازیش کنی و خیلی سریع‌تر کارت رو جلو ببری.

⚡افزونه AIPRM برای کسی که زیاد با ChatGPT کار می‌کنه، می‌تونه مثل یک جعبه‌ابزار از Promptهای آماده باشه.

@CodeVerse_dev
👏5❤2
🚨 اگر سایت وردپرسی داری، این هشدار رو جدی بگیر

یک آسیب‌پذیری در All-in-One WP Migration and Backup با شناسه CVE-2026-19949 گزارش شده که میلیون‌ها نصب رو تحت تأثیر قرار داده.

نکته خطرناک اینه که برای سوءاستفاده از این آسیب‌پذیری، مهاجم الزاماً به حساب کاربری نیاز نداره و گزارش‌هایی از فعال بودن Exploitها هم منتشر شده.

اگر این افزونه روی سایتت نصبه:

1. نسخه افزونه رو بررسی کن
2. حتما Backup سالم داشته باش
3. افزونه رو به نسخه امن آپدیت کن
4. کاربران Administrator رو بررسی کن
5. لاگ‌های ورود و تغییرات اخیر رو چک کن

و یه نکته مهم:

فقط Update کردن همیشه پایان ماجرا نیست.

اگر سایت قبل از Patch شدن در معرض آسیب‌پذیری بوده، باید احتمال دستکاری فایل‌ها یا ایجاد حساب غیرمجاز رو هم بررسی کنی.

💡 امنیت یعنی فقط جلوی حمله بعدی رو نگیری؛ باید بفهمی آیا قبلاً اتفاقی افتاده یا نه.

@CodeVerse_dev
👍5❤2
🔥تازگیا DevTools داره به ابزار تحلیل واقعی Performance تبدیل میشه

اگر هنوز DevTools رو فقط برای Inspect Element و ()Console.log باز می‌کنی، بخش بزرگی از قابلیت‌هاش رو ندیدی.

در نسخه‌های جدید Chrome DevTools، قابلیت‌هایی مثل:

🔹مبحث Soft Navigation Metrics

🔹 تحلیل بهتر Network

🔹 ابزارهای Debug برای Nested CSS

🔹همینطور CSS Specificity Breakdown

🔹 قابلیت‌های AI Assistance

اضافه یا بهبود پیدا کردن.

اما چیزی که برای توسعه‌دهنده‌های SPA خیلی جالبه، Soft Navigation Metricsـه.

در اپلیکیشن‌هایی که URL عوض میشه ولی صفحه کاملاً Reload نمیشه، Performance همیشه مثل سایت‌های سنتی قابل اندازه‌گیری نیست.

حالا DevTools می‌تونه این Navigationهای نرم رو بهتر در Performance بررسی کنه.

یعنی اگر با React، Vue یا معماری‌های SPA کار می‌کنی، DevTools فقط محل پیدا کردن Error نیست؛ تبدیل شده به ابزار جدی برای تحلیل تجربه واقعی کاربر.

💡 قبل از اینکه بگی «سایت کند شده»، Trace بگیر و بفهم دقیقاً کجا زمان داره مصرف میشه.

@CodeVerse_dev
❤8
⚠️ یه اشتباه معماری که با بزرگ شدن پروژه خودش رو نشون میده

فرض کن توی پروژه ۲۰ جا این کار رو انجام دادی:
fetch("/api/users")

بعد از چند ماه می‌فهمی API تغییر کرده:
/api/v2/users

حالا باید بری ۲۰ فایل مختلف رو بگردی و تغییر بدی.

مشکل fetch نیست.

مشکل اینه که جزئیات ارتباط با API پخش شده داخل Business Logic پروژه.

بهتره یک لایه مشخص برای API داشته باشی:

Components
↓
Services
↓
API Client
↓
Backend

مثلاً:
// userService.js

export async function getUsers() {
return api.get("/users");
}

حالا Component فقط می‌دونه:
const users = await getUsers();

اگر فردا URL، Header، Authentication یا حتی روش ارتباط تغییر کرد، لازم نیست کل پروژه رو بگردی.

🔥 این همون تفاوت بین:

«کدی که الان کار می‌کنه»

و

«کدی که شش ماه بعد هم قابل نگهداریه»

💡 هر چیزی که احتمال تغییرش بالاست، نباید در ۲۰ نقطه مختلف پروژه پخش شده باشه.

@CodeVerse_dev
👍7❤2
🚨 اگه Chrome رو روی سیستم کاری‌ات داری، این آپدیت رو عقب ننداز!

گوگل چند روز پیش یک آپدیت امنیتی مهم برای Chrome منتشر کرده که ۱۲ آسیب‌پذیری رو برطرف می‌کنه.

اما یکی از اون‌ها خیلی مهم‌تره:

CVE-2026-85046

این آسیب‌پذیری مربوط به موتور JavaScript یعنی V8 هست و طبق گزارش‌ها، در دنیای واقعی هم مورد سوءاستفاده قرار گرفته.

یعنی یک صفحه HTML مخرب می‌تونه در شرایط خاص زمینه اجرای کد روی سیستم قربانی رو فراهم کنه.

برای توسعه‌دهنده‌ها این موضوع مهم‌تره؛ چون ما معمولاً:

🔹 سایت‌های ناشناس زیادی باز می‌کنیم
🔹همچنین Repositoryهای مختلف رو بررسی می‌کنیم
🔹 ابزارهای آنلاین اجرا می‌کنیم
🔹همینطور Extensionهای زیادی روی مرورگر داریم

پس مرورگر هم مثل سیستم‌عامل باید همیشه Patch شده باشه.

مسیر بررسی نسخه:
Chrome → Help → About Google Chrome

💡 آپدیت مرورگر فقط برای کاربر عادی نیست؛ مرورگر بخشی از محیط توسعه توئه و باید مثل بقیه ابزارهای توسعه به‌روز نگه داشته بشه.

@CodeVerse_dev
👍7❤2
🧠 یه مشکل معماری که هرچی پروژه بزرگ‌تر بشه، بیشتر اذیتت می‌کنه

فرض کن توی پروژه JavaScript چندین بخش مستقیم به API وصل شدن:

fetch("/api/users")
fetch("/api/products")
fetch("/api/orders")

اوایل پروژه هیچ مشکلی نداره.

اما چند ماه بعد Authentication تغییر می‌کنه.

مثلاً باید یک Header اضافه کنی:

Authorization: Bearer TOKEN

حالا باید بری تمام fetchها رو پیدا کنی و تغییر بدی. 😐

اینجاست که داشتن یک API Client مرکزی ارزش خودش رو نشون میده.

مثلاً:

const api = {
get(url) {
return fetch(`/api${url}`, {
headers: {
Authorization: `Bearer ${token}`
}
});
}
};

حالا بقیه پروژه فقط با این لایه کار می‌کنن:

const users = await api.get("/users");

بعداً اگر:

🔹 Base URL تغییر کرد
🔹 Authentication تغییر کرد
🔹 Retry لازم شد
🔹 Logging اضافه شد
🔹 Error Handling مرکزی خواستی

فقط یک نقطه رو تغییر میدی.

ساختار کلی:

UI
↓
Service
↓
API Client
↓
Backend

🔥 اینجاست که مفهوم Separation of Concerns از یک اصطلاح تئوری تبدیل میشه به چیزی که واقعاً زندگی برنامه‌نویس رو راحت می‌کنه.

💡 پروژه‌های بزرگ معمولاً با یک تصمیم بزرگ خراب نمی‌شن؛ با صدها تصمیم کوچیک که هرکدوم «فعلاً مشکلی ایجاد نمی‌کنن» به مرور غیرقابل نگهداری میشن.

@CodeVerse_dev
🔥6❤2
🐘 چرا کپی کردن یک آرایه همیشه به معنی کپی شدن Memory نیست؟

یکی از رفتارهای مهم PHP که خیلی‌ها ازش خبر ندارن، Copy-on-Write یا همون COW هست.

مثلاً:

$data = range(1, 1_000_000);

$copy = $data;

شاید فکر کنی الان PHP دو آرایه‌ی یکسان داخل Memory ساخته.

اما نه. 👀

زبانPHP در این مرحله می‌تونه هر دو متغیر رو به همون داده‌ی موجود در Memory ارجاع بده.

تا وقتی که یکی از اون‌ها تغییر نکرده:

$data = range(1, 1_000_000);

$copy = $data;

عملاً لازم نیست فوراً یک کپی کامل ساخته بشه.

اما وقتی تغییر ایجاد می‌کنی:

$copy[0] = 999;

اینجاست که PHP باید داده رو از هم جدا کنه.

یعنی:

$data ───────┐
├──> Same Memory
$copy ───────┘

↓ تغییر

$data ─────────> Original Data

$copy ─────────> New Copy

🔥 نکته مهم‌تر

این موضوع وقتی مهم می‌شه که با آرایه‌های بزرگ کار می‌کنی.

مثلاً:

function process(array $data): void
{
$data['status'] = 'processed';
}

$users = getHugeArray();

process($users);

ممکنه با دیدن array $data فکر کنی PHP از همون ابتدا کل آرایه رو کپی کرده.

اما Pass-by-Value در PHP الزاماً به معنی Copy فوری نیست.

زبانPHP می‌تونه از Copy-on-Write استفاده کنه و فقط زمانی واقعاً کپی ایجاد کنه که داده نیاز به تغییر داشته باشه.

---

⚠️ اما اینجا یک دام وجود داره

اگر واقعاً نمی‌خوای آرایه کپی بشه و فقط می‌خوای تابع روی همان داده کار کنه، می‌تونی از Reference استفاده کنی:

function process(array &$data): void
{
$data['status'] = 'processed';
}

ولی این به معنی «همیشه بهتر بودن Reference» نیست.

حالا Referenceها می‌تونن باعث پیچیده‌تر شدن رفتار کد و ایجاد Side Effect بشن.

پس صرفاً برای کاهش Memory نباید کورکورانه از & استفاده کرد.

---

🧠 نکته حرفه‌ای امروز

در PHP:

Assignment ≠ Copy فوری

و:

Pass-by-Value ≠ Copy فوری

به لطف Copy-on-Write، PHP تا زمانی که لازم نباشه داده رو واقعاً Duplicate نمی‌کنه.

بنابراین وقتی Performance و Memory برات مهمه، باید تفاوت بین:

Value

Reference

Copy-on-Write

و

Actual Memory Copy

رو بشناسی.

این دقیقاً یکی از تفاوت‌های بین «کدی که فقط کار می‌کنه» و «کدی که رفتار PHP Engine رو می‌فهمه» است. 🐘


@CodeVerse_dev
👍5❤3
🌐 چرا localStorage جای خوبی برای ذخیره هر چیزی نیست؟

قابلیت localStorage خیلی جذابه.

چون ساده‌ست:
localStorage.setItem(
"username",
"ali"
);

و بعد:

const user =
localStorage.getItem("username");

ولی یک اشتباه خطرناک اینه که فکر کنیم:

«چون فقط داخل مرورگر ذخیره میشه، پس امنه.»

نه.

هر JavaScriptای که در Origin مربوطه اجرا بشه، در شرایط مناسب می‌تونه به localStorage دسترسی داشته باشه.

پس اطلاعات حساس مثل:

Password
Access Token
Secret Key
Personal Sensitive Data

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

از طرف دیگه localStorage همزمان با درخواست HTTP به سرور ارسال نمیشه؛ یعنی برخلاف Cookie، خودش مکانیزم ارسال خودکار Credential نیست.

برای Authentication باید معماری امنیتی درست داشته باشی، نه اینکه صرفاً یک Token رو داخل localStorage بذاری و خیال خودت رو راحت کنی.

یک API ساده ممکنه در چند خط نوشته بشه؛

ولی محل نگهداری Credentialها تصمیمیه که باید با تهدیدهای امنیتی پروژه گرفته بشه.


@CodeVerse_dev
👍4❤3
🛡️ بازگشت Worm معروف Shai-Hulud به npm

یک خبر جدی برای توسعه‌دهنده‌های JavaScript:

محققان امنیتی اعلام کرده‌اند که Shai-Hulud، یک Worm مخرب در اکوسیستم npm، دوباره فعال شده است.

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

بررسی‌ها نشان می‌دهد:

🔴 ۴ پکیج مخرب در فاصله کوتاهی منتشر شدند
🔴 حمله بعد از حدود ۱۱۱ روز دوباره مشاهده شد
🔴 و اینکه Payload استفاده‌شده همان نمونه قبلی بوده
🔴 هدف اصلی، سرقت Tokenها و اطلاعات حساس توسعه‌دهنده‌هاست

یعنی حتی اگر یک Package Manager سیستم بررسی امنیتی داشته باشد، باز هم نباید Blind Trust داشته باشیم.

🎯 برای پروژه‌های واقعی:

npm install
↓
Dependency
↓
Dependency Chain
↓
Malicious Code?
↓
Your CI/CD + Secrets

💡 امنیت Supply Chain یعنی فقط به کدی که خودت نوشته‌ای اعتماد نکنی؛ تمام Dependency Tree بخشی از سطح حمله پروژه است.

@CodeVerse_dev
👍5❤2
🚨بیش از ۶ میلیون سایت در معرض خطر بودند

دو آسیب‌پذیری جدی در Pluginهای محبوب WordPress شناسایی و Patch شده‌اند:

🔴 Elementor Pro
🔴 Super Forms

هر دو مشکل مربوط به Unrestricted File Upload بوده‌اند؛ یعنی مهاجم می‌توانسته فایل‌هایی با نوع خطرناک را در شرایط خاص روی سایت آپلود کند.

در مورد Elementor Pro، آسیب‌پذیری تا نسخه 4.2.1 وجود داشته و امکان Remote Code Execution را ایجاد می‌کرد.

شدت هر دو آسیب‌پذیری:

CVSS 9.8 / Critical

و نکته مهم‌تر:

⚠️ صدها هزار تلاش برای سوءاستفاده از این آسیب‌پذیری‌ها مشاهده شده است.

🎯 درس مهم برای WordPress Developer:

فقط WordPress Core را Update نکن.

Core
+
Plugins
+
Themes
+
Server
+
Dependencies
=
Security

💡 یک Plugin می‌تواند به اندازه خود WordPress Core سطح حمله ایجاد کند.

@CodeVerse_dev
👍6❤2
💻❤️ روز برنامه‌نویس مبارک!

به همه‌ی اونایی که ساعت‌ها باگ می‌زنن، دیباگ می‌کنن، سرچ می‌کنن و آخرش با یه ; یا یه پرانتز اضافه می‌فهمن مشکل کجا بوده 😂

برنامه‌نویسی همیشه آسون نیست؛ بعضی روزها پر از خطا و سردرگمیه، ولی هر چیزی که امروز برات سخته، با تمرین یه روز تبدیل میشه به چیزی که بهش افتخار می‌کنی.

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

روز همه‌ی برنامه‌نویس‌ها مبارک ❤️‍🔥

@CodeVerse_dev
❤‍🔥16❤2👎1