Pinned Tweet
اللهّم زد أبي مكانة حين يركع
وزده محبّه حين يرفع
وزده إخلاصاً حين يسجد
وزده تيسيراً وخيراً وعمراً وعافيه وبركه
Experimentation & A/B Testing Basics – Optimizely Docs
Client-side vs Server-side Testing – VWO Documentation
Why Validation Matters in Analytics Events – Mixpanel Blog
Security Considerations in Frontend-exposed API Keys – OWASP
يعني باختصار:
قدرت أزوّر بيانات التحليلات بالكامل، وأرسل أحداث وهمية، والنظام يعاملها كأنها حقيقية ..
ووصلنا للنهاية شكرًا لقراءتكم🩶,
ولو حبيتوا الاستزاده بالموضوع بترك لكم بعض المصادر تحت.
اللي صار إنّي ببساطة أرسلت Event من نوع:
fake_purchase_completed
وهو المفروض ما يتحقق إلا إذا العميل فعلاً سوا عملية شراء حقيقية
لكن بما إن كل شيء مفتوح لي لنظام صدق الحدث وسجّله بالداتابيس بدون ما يتحقق منه
طيب وين المشكلة بحالتنا هذي؟
الـ API Key المسؤول عن إرسال إيفنتات كانوا مستخدمينه كنوع من الـ authentication
فـ بهذا الريكوست قدرت أتصرف كأني السيرفر نفسه وتحكمت بالـ
- user_id
- goal
- timestamps
- properties
— بدون ما يسوي السيرفر أي validation علي.
قررت أبحث عن الموضوع وأكتشفت ان الموقع يستخدم نظام يسمى A/B Testing.
- وباختصار: هذي أنظمة تستعملها الشركات الكبيرة عشان يجربون أفكار، يعدّلون UI، يقيسون تصرفات المستخدم… إلخ.
المفترض إن الإيفنتات هذي تنرسل من المستخدم صح وتتسجل عندهم صح.
فـ هنا وضح لي أن أي تعديل أسويه مو بس ينقبل قاعد يرجع لي OK بالرسبونس وكأنه شي طبيعي
فاللأمانة جاء ببالي..
هل اللي قاعد يصير فعلًا يعتبر ثغرة ؟
واذا هذي البيانات قاعدة تنقبل وين قاعدة تروح؟
بعدها انتبهت لبرامتر اسمه Goals
جاء سؤالين ببالي:
وش بيصير لو خليت الGoal منتهي؟.
وش بيصير لو غيرته بالكامل؟
وبعض المواقع أصلًا يطلعون لك خصائص أو unlock features إذا تحققت أهداف معينة..
وفعلاً… لعبت فيه وقبل السيرفر كل شيء بدون ما يعترض أو يرفض.
وأنا أحلل الريكوستات بشكل عادي, لاحظت شيء غريب كان:
أكثر من ID طالع لي بالريكوست, وقررت أتلاعب فيها
لاحظت من خلال تلاعبي بأكثر من شيء أنه يرجّع لي
Response = OK





