Featured image of post Crul Paste

Crul Paste

curl paste یک FileBin تحت ترمینال برای گیک ها!

اول بیایید ببینم FileBin چیه! قبل از اون هم فکر می‌کنم همه بدونیم pastebin چیه. اگه نمی‌دونید خیلی ساده باید بگم یک سایتی که فقط روی اون متن به اشتراک می‌ذارن مثلا ممکنه ارور ها یا حتی سورس یک برنامه باشه!

اما FileBin ها بجای تسکت فایل های شما رو نگهداری می‌کنند و به شما لینکی ارائه می‌کنند که فایل را برای دیگران اشتراک بگذارید، نمونه های زیادی هم وجود داره مثل https://wormhole.app

اما خب از اونجایی که من زندگی‌ام رو توی ترمینال می‌گذرونم و ترمینال رو به باز کردن مرورگر برای اشتراک یک فایل ترجیح می‌دم، پس از FileBin هایی استفاده می‌کنم که بتونم تحت ترمینال به سادگی فایلم رو به اشتراک بذارم. برای مثال https://0x0.st

وقتی این رو سایت رو باز کنید هیچ گزینه‌ای برای انتخاب فایل و آپلود نمی‌بینید! خب پس چطور باید یک فایل را برای سایت آپلود کنید؟ کافیه یک ریکوئست HTTP POST خیلی ساده به سایت بزنید که شامل فایتون باشه. این کار رو خیلی ساده می‌شه با curl انجام داد.

مثلا بیایین اشتراک یک فایل رو ببینیم

1
2
$ curl https://0x0.st -F file=@/path/to/file
# https://0x0.st/zWKo.txt

این سایت خیلی خوبه اما از زمانی به بعد دیگه این سایت کاری که من نیاز دارم رو کفاف نداد! برای مثال من نیاز دارم فایلم بعد از اولین دانلود از روی سرور حذف بشه و از این مهم تر نیاز داشتم که چندین فایل رو با یک یوزنیم مشخص اپلود کنم که خب شخصی که قرار باشه فایل ها رو دانلود کنه، کافیه از یوزنیم استفاده کنه که راحت تر قابل حفظ کردن و اشتراک گذاشتنه. اینطوری بود که گفتم FileBin خودم رو بنویسم :)


بیایید فیچر ها و روش استفاده ازش رو با هم ببینیم.

فرض کنید شما یک فایل دارید که می‌خواهید با من به اشتراک بگذارید، خیلی ساده ترمینال رو باز می‌کنید و با یک دستور فایل رو با یک URL تقریبا تصادفی منتشر می‌کنید.

1
2
$ curl -L octocat.ir -F file=@/tmp/theFile.fli
# octocat.ir/theFile.fli

دقت کنید من از سوییچ -L استفاده می‌کنم، دلیل اینکار این هست که خب ممکنه سایت شما رو ریدایرکت کنه. مثلا از http ریدایرکت بشین به https. برای همین این سوییچ رو استفاده می‌کنم. با این سوییچ دیگه نیازی نیست https:// رو هم بنویسیم!

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

1
2
$ curl -L octocat.ir -F once=@/tmp/theFile.fli
# octocat.ir/theFile_GKug7xb.fli

تا اینجای کار همه URL های هر فایلی به صورت تصادفی هست و من نیاز دارم که چندین فایل رو زیر یک یوزنیم مشخص مثل arya قرار بدم. اینطوری وقتی قراره یک فایل رو برای همکارم توی شرکت بفرستم خیلی ساده ازش درخواست می‌کنم در سایت به ادرس /arya بره. حالا چطوری اینکارو بکنیم خیلی ساده بجای once یا file, همون username رو می‌نویسیم(توی مثال من از نام arya استفاده می‌کنیم)

1
2
$ curl -L octocat.ir -F arya=@/tmp/pic.jpg
# octocat.ir/arya

تا اینجای کار مثلا شما چند بار چند فایل مختلف رو زیر یک یوزنیم قرار دادین حالا چطور میشه همه اونها رو باهم دانلود کرد؟

1
$ curl -L octocat.ir/arya | wget -i -

حالا به این فکر کنید که یکنفر میاد و با یوزنیم های معقول ریکوئست میزنه به سایت و فایل های بقیه رو دانلود می‌کنه، اینجاست که پسورد به کار میاد. برای گذاشتن پسورد روی هر فایل کافیه توی خود URL سایت پسورد رو بعنوان http parametr بنویسد.

1
2
$ curl -L 'octocat.ir/?password=12345678' -F once=@/Desktop/TopSecret.fli
# octocat.ir/file/TopSecret/?password=12345678

اینجا دقت کنید که باید از کوتیشن استفاده کنیم چون علامت مساوی و علامت سوال رو bash وایلد کارد می‌بینه.

برای دانلود هر فایلی هم که پسورد داره کافیه دقیقا مثل مثال قبلی عمل کنید و پسورد رو توی http parametr وارد کنید

1
$ wget 'octocat.ir/file/TopSecret/?password=12345678'

براتون سواله که چرا پسورد روی توی URL گذاشتم؟ می‌شد که مثلا توی http header پسورد بگیریم و بدیم، پس چرا توی URL?

اینکار برای این هست که دسترسی به فایل ساده باشه. مثلا من وقتی می‌خام فایلی رو برای همکارم بفرستم و خب فرض کنم همکار من از header ها چیزی نمی‌دونه، و فقط با یک کلیک باید بتونه به فایل دسترسی پیدا کنه، اینجاست که من فقط یک URL به اون می‌گم :)


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

برای مثال ابزار که من درست کردم برای اشتراک فایل هست، اما بنظرتون میشه یک دایرکتوری و یا یک متن رو هم باهاش به اشتراک گذاشت؟

قطعا! اما چطوری؟

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

1
2
$ tar -cf - ~/Pictures | curl -L octocat.ir -F once=@-
# 'octocat.ir/file/_nUiuRPW/

با اینکار با استفاده از tar تمامی فایل ها و دایرکتوری های مثلا پوشه ~/Pictures رو به آرشیو tar تبدیل می‌کنید و بعد خروجی رو بعنوان ورودی به curl می‌فرستین.

حالا به این فکر کنید که بخواهیم یک متن رو منتشر کنیم، راهکار دقیقا مشابه قبلیه. به این شکل که یک متن رو با استفاده از echo به ورودی استاندارد curl می‌فرستیم.

1
2
$ echo 'Some Random Text' | curl -L octocat.ir -F once=@-
# octocat.ir/file/-_W00DSbS/

اینطوری خیلی راحت می‌شه خروجی هر کامندی رو روی به اشتراک گذاشت


سایت من توی آدرس octocat.ir در دسترسه، خوشحال می‌شم ازش استفاده کنید :)

اینو بدونید که سایت به صورت دیفالت فایل ها رو برای 24 ساعت نگه‌میداره

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

و اگه می‌خواهید برای خودتون این سرویس رو بیارید بالا از ایمیج داکر استفاده کنید

1
docker run -p 80:80 mshabane/curlpaste:latest

اگه نیاز دارین تا فایل ها برای تایم بالاتری نگه‌داری بشه، متغییر HOURS داخل فایل .env رو تغییر بدین.


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

1
curl -L octocat.ir -F arya_1=/path/to/file

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

و خب همچنین میشه یک کوتاه کننده لینک هم بهش اضافه کنم، و لینک های کوتاه شده رو ریدایرکت کنم.

1
curl -L octocat.ir -F url='https://example.com/some/looooong/url/'

اگه اینها رو اضافه کنم، این پست رو اپدیت می‌کنم ولی خوشحال می‌شم شما توی این پروژه مشارکت کنید.

comments powered by Disqus
قدرت گرفته از Hugo
قالب Stack ساخته شده توسط Jimmy