في laravel استخدمت cursorPaginate و عندما استخدمت orderby(id) يسوي حق الصفحة القادمة encode حق المعلومات الي بيبدا فيها و جربت اسوي decode في احد المواقع و اظهر لي id حق الصف. هل يعتبر غير امن معرفة id ام يكون اعتمادا على نوع المشروع؟
معرفت id يعتبر شيء خطر؟
الأمر آمن، فالتصفح من خلال Cursor Pagination، يعني أن لارافل لا يعتمد على OFFSET أي تخطي عدد معين من الصفوف كما في paginate العادية، بل على جملة WHERE.
وبترتيب النتائج بواسطة orderBy('id')، فالصفحة التالية تبدأ من حيث انتهت الصفحة السابقة، ولكي يعلم لارافل أين تبدأ، يحتاج إلى معرفة قيمة id لأخر عنصر تم جلبه.
لذلك، الـ cursor هو ببساطة عبارة عن كائن JSON يحتوي على القيم التي تم الترتيب بناءًا عليها، ثم يتم تشفيره بـ Base64، وذاك ليس تشفير لإخفاء البيانات بل ترميز للنقل Encoding.
بالتالي البيانات العامة كعرض مقالات، منتجات، أو تعليقات عامة، معرفة أن المقال رقم 50 يليه المقال رقم 51 لا يضر بشيء، فالـ ID سيكون ظاهر في العنوان في المتصفح أصلاً.
كذلك يجب حماية النظام بصلاحيات، فالأمن الحقيقي لا يعتمد على إخفاء الـ ID، بل على الصلاحيات، فحتى لو علم المهاجم أن هناك طلب برقم 1005، يجب أن يمنعه النظام من الوصول إليه في حال لم يكن يملك الصلاحية، سواء عرف الـ ID من الـ cursor أو خمنه عشوائيًا.
ولو الكود ضعيف ولا يتحقق من الصلاحيات، فمعرفة الـ ID تسهل على المهاجم الوصول لبيانات غيره، لكن المشكلة هنا في كود الصلاحيات وليس في الـ cursor نفسه.
التعليقات