لقد قمت ببعض الأعمال المتعلقة بالأمن المنطقي بناءً على معلومات المستخدم الحالي، مثل: إذا كان topic.creator.username يساوي User.current().username، فإنني أسمح للمستخدم بتعديل الموضوع أو استبعاده.
المسألة هي أنني أحتاج إلى ضمان بعض الإجراءات بناءً على جلسة المستخدم! لكنني أجريت بعض الاختبارات، وهذا هو السبب في أنني أتوجه إليكم الآن لأطلب مساعدتكم.
عبر JavaScript في متصفح الويب (حتى في وضع الإنتاج)، يمكنني تنفيذ الأمر Discourse.User.current().set('username', 'sometestename'). بهذه الطريقة، سيتم تمكين بعض الإجراءات في نظامي بمجرد هذا التغيير. أعرف أن هذا ليس هدف 99% من المستخدمين، ولكن بغض النظر عن هذه الحالة، هل تعرفون أي طريقة لضمان عدم قيام المستخدم بالتلاعب بمعلومات المستخدم؟
إذا قمت بتغيير المعلومات في متصفحك المحلي، فإن ذلك لا يغير أي شيء في الخلفية.
يتم تسجيل دخول المستخدم عبر رمز مصادقة، كما أعتقد، لذا لا يمكنك التظاهر بأنك شخص آخر أمام الخلفية:
وبما أنه لا يمكن خداع الخادم، فلن تتمكن من إجراء أي تغيير باسم مستخدم آخر.
بمجرد تحديث المتصفح، سيتم على الأرجح مسح التغييرات المحلية. وفي أسوأ الحالات، قد تؤدي إلى تعطيل حالة تطبيق JavaScript، وستضطر إلى مسح ذاكرة التخزين المؤقت.
كما ذكرت، فإن أفضل طريقة هي دائماً الحصول على جلسة المستخدم الحالية من الخادم الخلفي.
بهذه الطريقة، لن تتأثر التغييرات في ذاكرة التخزين المؤقت من المتصفح! هل تعرف مكاناً يمكنني من خلاله التحقق من أن الأمان المنطقي يعتمد على جلسة المستخدم من الخادم الخلفي، وليس من PreloadStore؟
أخبرني إذا كنت أخطئ في التوجيه! شكراً لك يا روبرت على المساعدة!
أنا لست خبيرًا في الأمان، بل مطور تطبيقات فحسب، ولكن جميع التغييرات الدائمة لا يمكن إجراؤها إلا على الخادم. ما يحدث في المتصفح باستخدام EmberJS هو لتسهيل الأمر على المستخدم ولتحسين تجربة الاستخدام، مثل التخزين المؤقت لتسريع الأداء، وسلوك واجهة التطبيق التلقائي السلس. هذا لا يغير حقيقة أنه في النهاية يجب التفاوض على جميع التغييرات الدائمة مع خادم Rails، وعند القيام بذلك، سيكون لديه إذن للقيام بذلك فقط للمستخدم المسجل في الدخول.
ينطبق نفس الشيء على جميع عمليات استرجاع البيانات - فسيرسل خادم Rails فقط البيانات التي يكون المستخدم المسجل في الدخول مخولًا بالاطلاع عليها.
لا أعتقد أنك بحاجة للقلق بشأن هذا، لأنه إذا حاول أي شخص التحايل على هذا، فسوف يفشل في أول عائق: لا توجد طريقة لخداع واجهة برمجة التطبيقات (API).
أنا قلق لأنني أعمل في بعض الطرق التي تكون فيها مثل هذه الإجراء متاحة أو غير متاحة اعتمادًا على المستخدم، سواء كنت منشئ الموضوع أو منشئ المنشور، لذا أحتاج إلى التحقق بناءً على جلسة المستخدم في الخلفية.
مثل هذا، في المنشور يمكن للمستخدم تعديله إذا كان منشئ المنشور.