حماية صفحات قالب طبقة العرض الداخلية في تطبيقات servlet

StackOverflow https://stackoverflow.com/questions/156002

  •  03-07-2019
  •  | 
  •  

سؤال

لدي سؤال أساسي للغاية حول تطبيقات الويب MVC في Java.

نظرًا لأن الأيام الخوالي لـ RAW JSP حتى تصل إلى التقنيات الحالية مثل Seam ، فإن النمط الأساسي للغاية كان دائمًا الإرسال الداخلي من وحدة التحكم التي قبلت في البداية الطلب إلى طبقة العرض التي تنشئ الإخراج ليتم إرسالها إلى العميل.

يتم إجراء هذا الإرسال الداخلي بشكل عام (على الرغم من أن الآلية قد يتم إخفاءها من خلال طبقة إضافية من التكوين) عن طريق طلب حاوية Servlet لمورد جديد باستخدام عنوان URL. يتم رسم خرائط عنوان URL هذا بواسطة نفس web.xml الذي يحدد أيضًا عنوان URL "الحقيقي" إلى الخارج.

ما لم يتم اتخاذ تدابير خاصة ، فغالبًا ما يكون من الممكن الوصول مباشرة إلى طبقة العرض مباشرة. شاهد العرض التوضيحي "تسجيل" التماس ، حيث يمكنك تجاوز "register.seam" والانتقال مباشرة إلى "registered.xhtml". هذه مشكلة أمنية محتملة. على الأقل ، يتسرب رمز المصدر لقالب العرض.

أدرك أن هذا مجرد تطبيق عينة أساسي ، لكن من الغريب أيضًا أن يجب اتخاذ أي تدابير إضافية لإعلان هذه الموارد الداخلية غير المرئية للخارج.

ما هي أسهل طريقة لتقييد نقاط دخول URL؟

هل ربما هناك شيء مثل دليل "Web-INF" ، وهو مكون مسار URL السحري الذي لا يمكن الوصول إليه إلا عن طريق الطلبات الداخلية؟

هل كانت مفيدة؟

المحلول 4

لقد رأيت الآن اثنين من التطبيقات التي وضعت JSP الداخلية في WEB-INF/jsp. يبدو أن هذا يقوم بالخدعة ، على الأقل لـ JSP ، وكذلك للسرعة. هو - هي لا يبدو أنه يعمل لصالح JSF, ، على أية حال.

نصائح أخرى

يمكنك منع الوصول إلى الموارد الداخلية باستخدام أ security-constraint في الخاص بك web.xml واصف نشر.

على سبيل المثال ، أستخدم التكوين التالي لمنع الوصول المباشر إلى JSPs:

<!-- Prevent direct access to JSPs. -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>JSP templates</web-resource-name>
        <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint/> <!-- i.e. nobody -->
</security-constraint>

لا أوصي بالسماح لطلبات الإنترنت بالوصول مباشرة إلى التطبيقات الخاصة بك. كنت أرمي خادم ويب في المقدمة ، ثم في ذلك ، أسمح بطلب أنواع معينة من عناوين URL. ألا تريد أن يذهب الناس إلى foo.com/jsps؟ تقيدها مرة واحدة وإلى الأبد هناك.

هناك القليل من المحادثة حول الموضوع هنا: إخفاء الصفحات وراء الويب؟

تتمثل إحدى طرق التعامل مع هذا في إنشاء مرشح Servlet الذي يفحص مسار الطلب لكل طلب ويتعامل مع كل طلب وفقًا لذلك. إليك رابط يمكن أن يساعدك في البدء ، صفحات Javaserver (JSP) و JSTL - التحكم في الوصول مع JSP

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top