Panic Dev – Telegram
Panic Dev
1.11K subscribers
123 photos
29 videos
2 files
132 links
Panic Dev; your Panic's solution 🔥

🍿 Telegram
🔰 t.me/PanicDev

🍿 Laravel Community
🔰 t.me/LaravelGroups

😇 Contact Me
🔰 t.me/MentionHex

Thanks for sharing us 💛
Download Telegram
یک سوال چالشی

من به عنوان attacker وب سایت شمارو مورد بررسی قرار میدم
و میخوام که یوزر نیم پسورد کاربران شمارو پیدا کنم !

یک روش که میتونه کار من رو راحت کنه این هستش که وقتی یوزر نیم و پسورد رو وارد میکنم
به من یک خطای واضح برگرونید
مثلا

- ایمیل وارد شده یافت نشد
- پسورد وارد شده اشتباه است .


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

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



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


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

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

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

برای این که کار من و سخت تر کنید . چه راه حلی دارید ؟ ( بدون AI بگید اگر که جوابی دارید . ) 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
Panic Dev
یک سوال چالشی من به عنوان attacker وب سایت شمارو مورد بررسی قرار میدم و میخوام که یوزر نیم پسورد کاربران شمارو پیدا کنم ! یک روش که میتونه کار من رو راحت کنه این هستش که وقتی یوزر نیم و پسورد رو وارد میکنم به من یک خطای واضح برگرونید مثلا - ایمیل…
مچکرم از مشارکتتون

جواب ها تا حدی زیادی نزدیک بود ،‌ دمتون گرم
هدف تمرکز روی خود عمل بود . بدون در نظر گرفتن بلاک کردن ، ریت لیمیت و امثال این ها .


اما هدف از طرح چالش این بود که شما رو با کلاس Timebox
تو لاراول آشنا کنم که ۲۰۲۲ معرفی شد .
شاید خیلی ها تو داکیومنت دیده باشیدش ولی نمیدونستید کاربرد واقعیش چی بوده . و یا کجا میشه ازش استفاده کرد
یا اینکه با این حمله و مفهوم Timeless Timing Attack اشنا نبودید


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

که مثالش میشه این




protected function hasValidCredentials($user, $credentials)
{
return $this->timebox
->call(function ($timebox) use ($user, $credentials) {
$validated = ! is_null($user)
&& $this->provider->validateCredentials($user, $credentials);

if ($validated) {
$timebox->returnEarly();

$this->fireValidatedEvent($user);
}

return $validated;
}, 200 * 1000);
}



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

🔗 داکیومنت
🔗مقاله مربوطه


@panicdev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
حال دولوپرا تا چند هفته 🫣
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣24👍2🌚2😁1
لایووایر توی نسخه جدیدش چندتا دایرکتیو و تابع جدید معرفی کرده 🥳

wire:text
wire:show
wire:cloak
wire:transition
$js(...)
$this->js(...)

اول از همه این‌که شما به سادگی و با ران کردن
composer update livewire/livewire

میتونید به راحتی این آپدیت رو دریافت کنید و از این فیچرها استفاده کنید 📝


حالا هرکدوم از این موارد چیکار میکنن؟ 🙄

با استفاده از wire:text میتونید به راحتی متن پروپرتی‌تون رو توی المان های blade قرار بدید
public int $likes = 85;

توی Blade به این‌صورت عمل کنید
<span wire:text="likes"></span>

نتیجه این میشه که 85 توی spanتون قرار میگیره 🤟


با استفاده از wire:show میتونید بر اساس یک پروپرتی توی کلاس کامپوننت؛ یک المان از blade رو نمایش بدید یا مخفی کنید
public bool $showModal = false;

توی Blade به این‌صورت عمل کنید
<div wire:show="showModal"></div>

و زمانی که مقدار showModal برابر با true بشه، div شما نمایش داده میشه.

حتی میتونید از transition ها برای انیمیت کردنش استفاده کنید


مستندات توابع و دایرکتیو هارو میتونید از داکیومنت ببینید 🙄

⭐️ wire:text docs
⭐️ wire:show docs
⭐️ wire:transition docs
⭐️ wire:cloak docs
⭐️ $js & this->js() docs
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥9👍9
همه چی عالی !
جای شما خالی ....
🤣18👍1🔥1🕊1🌚1
بحث #دیتابیس #mysql

داشتم یک مطلبی میخوندم ،‌ به یک دستوری اشاره کرد به اسم ANALYZE کنجکاو شدم که بدونم به چه کاری میاد و باهاش میشه چیکار کرد .

مواردی که تونستم در بیارم زیاد نبود ،‌
ولی یه خلاصه و چند مورد از سناریو هایی که بهتر هست از این دستور استفاده کنیم رو بخوام بگم. این هستش که :

دستور ANALYZE TABLE یک دستور مفید برای به‌روزرسانی آمار داخلی جدول که به بهینه‌سازی اجرای کوئری‌ها کمک میکنه !

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


زمانی که بعد از تغییرات بزرگ در داده‌ها، کوئری‌ها کند شدند.
زمانی که بعد از افزودن ایندکس، ایندکس استفاده نمی‌شود.
زمانی که MySQL به جای استفاده از ایندکس، کل جدول را اسکن می‌کند.
زمانی که بعد از بازیابی بکاپ، سرعت پایگاه داده کاهش یافته است.
زمانی که جدول را با OPTIMIZE TABLE بهینه کرده‌اید.



✴️ نکات و best practices
🔹 تحلیل منظم: به‌طور مرتب دستور ANALYZE TABLE را روی جداولی که تغییرات داده‌ای زیادی دارند اجرا کنید تا عملکرد کوئری‌ها حفظ شود.

🔹 پایش عملکرد: این دستور را به‌عنوان بخشی از نگهداری دوره‌ای اجرا کنید، به‌ویژه پس از عملیات حجیم روی داده‌ها، تا آمارها به‌روز بمانند.

🔹 توجه به سربار پردازشی: در نظر داشته باشید که ANALYZE TABLE ممکن است هنگام تجزیه و تحلیل، جداول را قفل کند که می‌تواند بر عملیات همزمان تأثیر بگذارد. بهتر است آن را در ساعات کم‌بار اجرا کنید تا اثرات منفی کاهش یابد.

🔹 سازگاری با موتورهای ذخیره‌سازی: این دستور در موتورهای ذخیره‌سازی مانند InnoDB و MyISAM پشتیبانی می‌شود اما ممکن است برای همه موتورهای ذخیره‌سازی قابل استفاده نباشد. قبل از استفاده، از سازگاری آن اطمینان حاصل کنید.

🔹 اجرای خودکار: در برخی شرایط، MySQL ممکن است به‌طور خودکار ANALYZE TABLE را اجرا کند، اما اجرای دستی آن تضمین می‌کند که آمارها به‌روز باشند.

🔹 ارزیابی اثربخشی: برای بررسی تأثیر ANALYZE TABLE، برنامه‌های اجرای کوئری (Execution Plan) را قبل و بعد از آن مقایسه کنید. اگر موتور ذخیره‌سازی شما از آن پشتیبانی نمی‌کند یا باعث افت عملکرد قابل‌توجهی می‌شود، از اجرای آن خودداری کنید.


نکته اضافه :

دستور EXPLAIN ANALYZE در MySQL هم داریم که اطلاعات دقیقی درباره‌ی برنامه‌ی اجرای کوئری میده ،‌ از جمله جزئیات مربوط به تصمیمات بهینه‌ساز، روش‌های دسترسی و هزینه‌های تخمینی. برخلاف EXPLAIN که فقط طرح اجرای کوئری را بدون اجرای واقعی آن نمایش میده EXPLAIN ANALYZE کوئری را اجرا میکنه و آمار زمان اجرا را ارائه می‌کند. این ویژگی یک ابزار ارزشمند برای تحلیل عملکرد کوئری‌ها و شناسایی نقاط قابل بهبود .


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

- لینک
- لینک
-لینک


#تجربه

خیلی دوست دارم کسانی که تجربه کار با این کامند داشتند ، تجربیاتشون رو با ما به اشتراک بگذارند . تاثیراتی که روی دیتابیس و کوئری ها بوده به چه صورتی بود و چقدر تائیر گذار داشته ، آیا این رو به صورت دوره ای schedule کردن ؟
ایا تجربه بدی هم ازش داشتن .
آیا اطلاعات بیشتری یا سناریو هایی بیشتری میشناسید که از این کامند استفاده کنیم ؟


با اشتراک گذاری اطلاعاتتون مارا خوشحال کنید .
سپاس

@panicdev
👍6
🚀 پکیج GPDF یک پکیج PHP/Laravel برای تولید PDFهای عربی، راست‌چین (RTL) و چندزبانه است که به‌صورت بومی از ۱۷ فونت عربی داخلی پشتیبانی می‌کند. این پکیج با پشتیبانی از فضای ابری S3 بر اساس DomPDF توسعه یافته و مشکلات رندر متن عربی را حل کرده است، در عین حال قابلیت‌های مدرنی را برای اسناد، فاکتورها و گزارش‌ها اضافه می‌کند.


https://github.com/omaralalwi/Gpdf



#package

@panicdev
🔥9👍4
حتماً برات پیش اومده که بخوای از سرورهای ایران به وب‌سرویس ربات‌های تلگرام وصل بشی، ولی همیشه کلی دردسر داشتی. خوب، یه راه‌حل ساده، رایگان و بی‌دردسر برات دارم که می‌تونی راحت ازش استفاده کنی! 🚀

راه حل چیه؟
Cloudflare Workers

سرویس Cloudflare Workers این امکان رو بهت می‌ده که یه قطعه کد یا پروژه رو روی ساب‌دامین خودت یا حتی ساب‌دامین workers.dev (که خود کلادفلر ارائه می‌ده) اجرا کنی. این سرویس کاملاً رایگانه و استفاده ازش خیلی ساده‌ست.

🎯 چطور راه‌اندازی کنیم؟
خیلی راحت:
1. تو Cloudflare ثبت‌نام کن.
2. یه Worker جدید بساز.
3. این کد رو توش کپی کن:

export default {
async fetch(request, env, ctx) {
const requestClone = request.clone();
try {
const url = new URL(request.url);
const targetUrl = `https://api.telegram.org${url.pathname}${url.search}`;
const telegramRequest = new Request(targetUrl, {
method: request.method,
headers: request.headers,
body: request.method !== 'GET' && request.method !== 'HEAD' ? await requestClone.blob() : undefined,
});
const response = await fetch(telegramRequest);
return new Response(await response.clone().blob(), {
status: response.status,
statusText: response.statusText,
headers: response.headers,
});
} catch (error) {
return new Response(`Proxy Error: ${error.message}`, { status: 500 });
}
},
};


🚀 چطور ازش استفاده کنیم؟
وقتی Worker رو دیپلوی کردی، یه دامنه اختصاصی براش می‌گیری. حالا کافیه به‌جای این که درخواست‌هات رو به api.telegram.org بفرستی، به دامنه Worker خودت بفرستی و همون جواب رو بگیری. 🎉

💡 چرا این روش عالیه؟
کاملاً رایگان و بدون نیاز به سرور
نیازی نیست کدهای اصلی باتت رو تغییر بدی
سرعت بالا و بدون محدودیت دسترسی
امکان استفاده روی دامنه اختصاصی

برای جزئیات بیشتر، یه سر به مستندات Cloudflare Workers بزن. 😉

Happy Coding! 🥳
@PanicDev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍10❤‍🔥5
واقعا بعضیا خودشونو مسخره کردن 😐

بعد همینا میگن :
بابا ما آگهی میزنیم نیرو کار نیست .
دیگه کسی کار نمیکنه
یا همه روزمه هایی که میفرستن سطح پایین جونیور
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣15👍3
#نکات دیتابیسی

شما یه جدول درست میکنی که تراکنش های هر کاربر رو ذخیره میکنه
مثلا میگه کاربر شماره X امده ۲۰ دلار در تاریخ فلان تراکنش انجام داده .

بعد اینو به زیبایی با یک میلیون رکورد پر میکنید . به وسیله PROCEDURE عزیز .

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

 
SELECT user_id, SUM(amount) AS total_amount
FROM transactions
GROUP BY user_id;


خوب این کوئری ظاهرا ۱۵۰ ثانیه زمان لازم داره


چیکار کنیم ۱۵۰ ثانیه بشه ۲ ثانیه

@panicdev
گفتند که
اگر به جدول یه index برای user_id در نظر بگیرید

از ۱۵۰ ثانیه میشه ۸۰ ثانیه .

خوبست ،‌ دیگه چیکار کنیم ؟

@panicdev
گفتند که بیایم بر اساس transaction_date
جدول و پارتیشن بندی کنیم .

اینجوری سرعت کوئری از ۸۰ میرسه به ۲۰ .

من خودم روی صحت این قضیه شک دارم . چون که برای کوئری کلی مثل این ( گزارش تمام کاربر ها در تمام سال هارو بخوایم بگیریم ). نباید تاثیر خاصی داشته باشه .

ولی در عوض اگه بگیم گزارش همه کاربر هارو برای سال ۲۰۲۱ بده . خیلی باید تاثیر گذار و سریع باشه .


نظر شما چیست ؟

@panicdev
خوبه ،‌ دوستان اشارات خوبی کردن ، مچکریم

بعله ،‌ میریم سراغ Materialized

اینجا میگه یه جدول جدا میکنی روی
user_transaction_sums

بعد یه cron درست میکنی برای اونت
update_user_sums

که این میاد scheduler میکنه ،‌ هر یک ساعت یکبار ، محاسبات رو مجدد روی جدول انجام بده

و جدول شبه Materialized رو براتون آپدیت کنه .


الان میتونید از این کوئری بگیرید در حد ۲ ثانیه خروجی رو ببینید.

@panicdev
👍4
آقا ،‌ دید مثلا این سایت های بزرگ
وقتی یه درخواستی میزنی ،‌ به هر دلیلی میخوره تو دیوار ،‌ یه پیام نشونت میده .

میگه که این درخواست شما رفت تو دیوار ،
این UUID خدمت شما (که مربوط به درخواست میشه ) بردار ببر پشتیبانی پیگیری کن


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


خوب یه بنده خدایی امده مفهوم Context رو معرفی کنه .
و این مثال رو زده ،
گفته شما میتونید در ابتدای امر یه UUID بسازید و به درخواست اتچ کنید .
و این رو در جاهای مختلف که خواستید لاگ بندازید ازش استفاده کنید .

مثلا :
یه API کال میشه . اینو همون اول اتچ میکنید به API و هرجایی که خواستید لاگ بندازید .
اینو از Context برمیدارید و لاگ و همراه با متعلقاتش و این UUID ثبت میکنید .

(شاید بگید من همونو مریزم داخل request ، از همون جا هم بر میدارم ، Context نمندی .
خوبه ولی جاهایی مثل جاب ها دیگه بهش دسترسی نداری. )


آما ،
یه نکته به چشم خورد (تصویر دوم )
امده گفته که شما میتونی یه Middleware بنویسی و بزارید برای API تا بتونید Status , response time اینارو در بیارید به Context اضافه کنید .


ولی بنظرتون این کد درسته ؟ و جای درستی نوشته شده ؟


@panicdev
👍3
🚀 امدیم با Flow PHP: جادوگر داده‌ها!

اگه فکر می‌کنی پردازش داده توی PHP دردسر داره، Flow PHP اومده که کارت رو راحت کنه! یه فریم‌ورک سبک، سریع و با مصرف کم حافظه که حتی با کوهی از داده‌ها هم کم نمیاره! 😎

ویژگی‌های خفن:
🔹 حافظه کم مصرف: حتی با داده‌های عظیم، مصرفش ثابته!
🔹 وصل شدن به هر منبع داده‌ای: دیتابیس، اکسل، فضای ابری؟ مشکلی نیست!
🔹 تغییر شکل داده با کلی فانکشن آماده! 🔄
🔹 پردازش مستقیم فایل‌های راه دور (دیگه دانلود نمی‌خواد!)
🔹 گروه‌بندی، مرتب‌سازی، و حتی جدول ASCII برای داده‌ها! 😍
🔹 کش داخلی برای پردازش سریع‌تر 🚀

یه PHP 8.2+ فقط کافیه، بقیه‌شو Flow می‌سازه! 😏


🔗 لینک : https://flow-php.com


@panicdev
👍9🔥3❤‍🔥2
#متفرقه

۱. زندگی اسون نمیشه/ تو قوی میشی

۲. هیچکس به مشکلات شما اهمیت نمیده

۳. شما در یک جنگ چند بعدی نا‌برابر هستید

۴. بیشتر آدما شما رو دوست ندارن/ همه دنبال منافع خودشون هستن

۵. زندگی، همین لحظه های بدیهی و عادی هست که میزنیم جلو ببینیم چی میشه

۶. هر چیزی که به سمت تعالی نره، خود به خود به سمت تباهی میره

۷. زندگی بر اساس قدرت کار میکنه نه عدالت

۸. هیچ اتفاقی تصادفی نمیوفته
هر اتفاقی که میوفته
و هر اتفاقی که نمیوفته دلیل داره


@panicdev
👍27❤‍🔥4🕊1
🚀 ابزار DDEV: نجات‌دهنده توسعه محلی!

🛠 دوست داری محیط توسعه خودت رو سریع و بی‌دردسر راه بندازی؟

💡 اگه تا حالا با Docker کار کردی، می‌دونی که میشه با چند تا ایمیج ساده یک محیط توسعه محلی ساخت. اما چرا وقتی DDEV هست، باید وقتت رو برای ساخت یه محیط دستی با Docker تلف کنی؟ 🤔


⚡️ مقایسه DDEV با ساخت دستی محیط توسعه با Docker

🔹 راه‌اندازی محیط توسعه دستی با Docker 🔨

کنترل کامل روی تنظیمات
شخصی‌سازی نامحدود
باید تمام مشکلات رو خودت حل کنی
پشتیبانی از تیم روی دوش تو هست
ممکنه وقت زیادی ازت بگیره

🔹 استفاده از DDEV 🚀

کاملاً متن‌باز، بدون قفل شدن به یک شرکت خاص
بیش از ۶ سال توسعه و بهبود توسط جامعه

پشتیبانی از Drupal، Laravel، WordPress، Magento، Shopware و...
پشتیبانی از MySQL، MariaDB، PostgreSQL
امکان استفاده روی macOS، Windows (WSL2)، Linux
دارای HTTPS داخلی برای هر پروژه
امکان اجرای چند پروژه به‌صورت همزمان
برای Xdebug آماده به کار!
قابلیت اضافه کردن امکاناتی مثل Redis، Elasticsearch، Apache Solr و...

---
🎯 نتیجه‌گیری؟ وقت خودتو تلف نکن!

😎 اگه نمی‌خوای همش درگیر تنظیمات Docker و پشتیبانی از تیم بشی، DDEV انتخاب عالیه!

با DDEV، بیشتر روی کدنویسی تمرکز کن، کمتر روی پیکربندی! 🔥

🖥 امتحان کن و از وقت آزاد بیشترت لذت ببر!
🚀

@panicdev

#Docker #برنامه‌نویسی #DevOps
❤‍🔥12👍1
فیلامنت ورژن 4 - آلفا 1 به زودی در دسترس میشه 😎

https://github.com/filamentphp/filament/milestone/3
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥13👍2
بهش گفتیم یه PSR استاندارد درست کنید یا از یه چیزی pint استفاده کنید . کد یه دست بشه .


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

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

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

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

بیشتر این شرکتارو برنامه نویس های هندی تشکیل میده که فقط کارشون تولید شِت کد هست .
و خیلی هم با اعتماد بنفس ازش دفاع میکنند . 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥1
این روز ها یه متولوژی مورد بحث و توجه گرفته به اسم Shape Up که تازگی ها برخی شرکت ها شروع کردن به استفاده کردن که برخی از نقایص اسکرام رو پوشش میده ظاهرا

برام جالب بود . گفتم با شما هم به اشتراک بزارم .
اگر تجربه ای در این زمینه دارید . به اشتراک بزارید. 😊


شیپ‌آپ یک چارچوب مدیریت پروژه است که توسط شرکت Basecamp معرفی شده و هدف اصلی آن افزایش کنترل و پیش‌بینی‌پذیری در فرآیند توسعه نرم‌افزار است. برخلاف اسکرام که مبتنی بر اسپرینت‌های کوتاه‌مدت (۲-۴ هفته) و رویکرد چابک (Agile) است، Shape Up از چرخه‌های ۶ هفته‌ای استفاده می‌کند. در این روش، تیم‌ها ابتدا به‌طور دقیق ایده‌ها را پردازش (Shaping) می‌کنند و سپس در یک بازه زمانی ثابت توسعه می‌دهند.

مراحل اصلی شیپ‌‌آپ:

اول Shaping:
مشخص کردن ایده‌های کلی و طراحی محدوده پروژه قبل از ورود تیم توسعه.

دوم Betting Table: بررسی ایده‌ها و انتخاب پروژه‌هایی که بیشترین ارزش را دارند.

سوم Building:
یک دوره ۶ هفته‌ای که در آن تیم توسعه بدون وقفه روی محصول کار می‌کند.

چهارم Cool Down: یک دوره استراحت و مرور پس از تکمیل پروژه.

در این باره bootcamp یک کتاب ارائه داده که میتونید از اینجا بخونید .

https://basecamp.com/shapeup

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

https://github.com/mohamadsmt/Shapeup


این هم یک مقاله که اسکرام و shape up رو مقایسه کرد .

https://vrgl.ir/n93i3


@panicdev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍3