آری به اختراع چرخ، نه به بهبود چرخه
بله عزیزانم BasisCore! زبان برنامهنویسی بومی
واقعیتش تیتر خبرگزاری مهر با عنوان «با تلاش یک شرکت دانش بنیان، زبان برنامهنویسی بومی ایرانی نوشته شد» بهطرز عجیبی همه رو متعجب کرد و من هم مثل شما! کوتاه و خلاصه بگم که رفتم سراغش ببینیم که چه چیز جدیدی بومی شده اینبار و چطوریاست... ابتدا باید بگم که اطلاعات بهطرز باور نکردنی مبهم و پر از ایراد بود. از این موضوع که بگذریم، توی بررسیهام به نکات امنیتی جالبی برخوردم که ابعاد فاجعه این زبان برنامهنویسی (BasisCore) برام بیشتر روشن شد. در ادامه با من همراه باشید 😉
اینکه ما همیشه دوست داریم چرخ اختراع کنیم و کاری به بهبود چرخه نداریم واقعا یه بحث اساسیه و متاسفانه سالهاست که گرفتارشیم! اما از تیتر این یادداشت که بگذریم، برای شروع ماجرای زبان برنامه نویسی بومی، اول از همه توجه شما رو جلب میکنم به بخشهای مهم متن خبر اولیه خبرگزاری مهر (مشخصا بخشهایش رو هایلایت کردم که پیش از شروع حدودا شما هم بفهمید با چی مواجه هستید):
در خبر مهر به حمیدرضا اعتدال مهر اشاره شده بود که ایشون مدیر عامل شرکت منظومه نگاران، مبدع زبان BasisCore و رئیس هیئت مدیره انجمن صنفی کسب و کارهای اینترنتی تهران هستند. شرکت منظومه نگاران و زبان BasisCore رو سرچ کردم که به سایتهاشون برسم.
جالبترین چیزهایی که در بخش «ما چه کاری انجام میدهیم» وبسایت منظومه نگاران ادعا کردن، اینها بود:
- Basiscore: Web server
- Basiscore: database
- Basiscore: Schema
- Basiscore: hosting
- Basiscore: CMS
همچنین گفتن که ۲۹ استارتاپ داشتن، ۷۵۳ وبسایت طراحی کردن و ۱۴۳۹۱ خط کد نوشتن! اما از آمار و ارقام که هم بگذریم، توی سایت Basiscore چیز جالبتری برام وجود داشت و کلا نظرم رو به خودش جلب کرد... زیر بخش لاگین یه لوگو بود به اسم Trust Login! یکی دیگر از محصولات شرکت منظومه نگاران!
این شد که چک کنم ببینم چقدر trustability داره که نتیجه شد این:
بخوام کوتاه توضیح بدم، وضعیت احراز هویت برای ثبتنام و ورود به حساب در CMS زبان برنامهنویسی Basiscore یه چیزیه توو مایههای محصولات سال ۱۹۹۸ و آشفتهبازاریه واسه خودش... اساسا من میتونم با هر ایمیلی حساب بسازم، کد فعالسازی رو خودش توی درخواست ارسال ایمیل تاییدیه، همون لحظه دو دستی بهم میده و جدای این، rkey همون چیزی هست که من برای دسترسی به هر حسابی بهش نیاز دارم که میشه یه کوکی قابل سرقت! درمورد امنیت ذخیره و نگهداری از پسوردها هم اصلا حرف نزنیم...
در ادامه برای تست بیشتر، وارد بخش demo سایت Basiscore شدم؛ چیزی که ثبتنامش برای عموم آزاد محسوب میشه... حالا حدس بزنید با چه صحنهای در بخش کاربران مواجهه شدم؟! دوستان برنامهنویس نگید که فیچره 😏
با دیدن این صحنه تصمیم گرفتم از بخش demo.basiscore.com سوئیچ کنم به user.basiscore.com و با همون کوکی rkey حساب دمو، اینبار سایت یوزر رو امتحان کنم و ببینم میشه وارد حساب شد یا نه... که نتیجه موفقیت آمیز بود و بدتر از اون حدس بزنید چی شد؟ رفتم بخش کاربران سابدامینهای demo و user رو با هم مقایسه کنم که دیدم یکی هستن! فرض رو بر این گذاشتم که احتمالا جفتشون دمو هستن و این اطلاعات ملت هم اصلا آزمایشی! گفتم بذار یه نگاهی به وبسایتهای مشتریهاشون بندازم! بالاخره ادعا کردن ۷۵۳ وبسایت با این چیز بومیشون درست کردن! در عین ناباوری اونم شد و دیتاها همه جا یکی بودن و در دسترس... کوتاه و مودبانه بخوام بگم، دهنشون سرویس، اینا کلا یه دیتابیس دارن، دیتای همه رو همونجوری میریزن توش و کلا با یه کوکی ثابت کاربری (حتی شده آزمایشی) میشه توی همه سایتهاشون وارد شد و خیلی کارها انجام داد!
بعدش یه نگاهی به مسیجها و بخش تیکتینگ سایت انداختم، از اونجایی که من اکانت تست درست کرده بودم، مسیجی نداشتم! اما بالاتر useridهای سایر کاربرها رو داشتم، برای همین گفتم برای اونها رو بذار چک کنم! راستش اصلا سخت نبود، اعلان مسیجها یا بهعبارتی پیامهای خصوصی و تیکتها از طریق یه مسیر اختصاصی لود میشدن که توی آدرس مربوطه، میشد به متن پیامها و جزئیات بیشتر بود... اینجوری شد که یه نگاهی به خلاصه مسیجهای دریافتی fatemeh lajevardian با یوزر آیدی 127920 و همکارانش انداختم... امیدوارم فاطمه لاجوردیان ۱۹ ساله، از خیابان خاوران، من رو ببخشه که قبلش نشستم مشخصات کاربریش رو در بخش ویرایش اطلاعات شخصی چک کردم و امیدوارم بابت اینکه در اینجا اسمش اومده یا اطلاعاتش در دسترس دیگران قرار گرفته، بره از بانی نشت اطلاعات هویتیش شکایت کنه!
راستش کل ماجرا به اینجا ختم نشد و یه جایی توی بررسیها یه کاراکتری رو اشتباهی (سهوا) توی urlها نوشته بودم که دیدم بله، debug=true هستن و خب اینم خودش در جالبه!
String reference not set to an instance of a String.
Parameter name: s at System.Text.Encoding.GetBytes(String s)
at HttpServer.Cms.HtmlParser.Parse(String html, IHttpContext currentContext)
in D:\iteration source - table 13 removed\HttpServer.Cms\Html\HtmlParser.cs:line 487
at HttpServer.Cms.HttpContext.Render() in
D:\iteration source - table 13 removed\HttpServer.Cms\Http\HttpContext.cs:line 101 at
MyWebServerNamespace.MyWebServer.LoadCmsValues
(Content cms, Ssl sslClass, DataSet& Ds, DataTable& fileDt, Socket& mySocket, Byte[]& contentBytes, Boolean& showCmsError)
in D:\iteration source - table 13 removed\MyWebServer\MyWebServer.cs:line 1632
از اونجایی که من سوادم اونقدرها به محصولات بومی نمیرسه و همونطور که آقای اعتدال در مصاحبهشون گفته بودن «با توجه به پیچیدگی های فنی و نبود متخصص در سطح این پروژه توسعه، حدود ۱۰ سال به طول انجامید» گفتم بذار گوگل کنم ببینم این خطا چی چی هست و کجاها میشه بیشتر درموردش دید؟ تنها چیزی که یافتم این بود:
چیزهای دیگه هم بود و هست... اما بذارید بگم، خب لامصب توی پروداکشن چرا اینجوری میکنی؟ صاحبان این ۷۵۳ وبسایتها که به واسطه ریاست هیئت مدیره انجمن صنفی کسب و کارهای اینترنتی تهران بودنت، شرکتت براشون سایت درست کرده، میدونن با چه فاجعهای طرف هستن؟ نونت نبود، آبت نبود، مصاحبه کردن و شوآفت چی بود آخه؟
خلاصه کنم این داستان رو، CMS، Schema و DataBase تون که تعریفی نداشت، یعنی در حقیقت افتضاح بود. اون WebServerتون هم که ادعا کرده بودید سه برابر سریعتر از وبسرور آپاچی هست (🤔) هم زیر بار یه کراول ساده اطلاعات همین چندتا یوزر (محض اطمینان برای آینده) سکته کرد... چی باقی میمونه؟ تازه در ۵ سال گذشته این برنامه بررسی و اشکال زدایی شده اینه؟ اولش چی بود؟ بگذریم... چرخی که اختراع کردید به درد نمیدونم کی میخوره، اما واقعا خسته نباشید... در آخر فقط اینکه آقای حمیدرضا اعتدال، شما که از فونت ایرانسنس توی وبسایتتون استفاده میکنید، حداقل لایسنسش رو هم تهیه کنید 😉