java - ترجمة - votes موقع




في جستل/جسب عندما يتعين علي استخدام<c: أوت فالو="${ميفار}"/> وعندما يمكنني أن أقول ${ميفار} (2)

لقد تم القيام بذلك طوال الوقت في بلدي رمز جسب:

<c:out value="${myVar}"/>

اليوم أدركت لأول مرة لأول مرة أنني يبدو أن تكون قادرة على استخدام هذه النسخة أقصر أيضا:

${myVar}

يعمل بدون <c:out> !

ربما يكون ذلك لأن صفحتي معلنة كالتالي:

<%@ page language="java" contentType="text/html; 
charset=utf-8" pageEncoding="utf-8" isELIgnored="false" %>

لذا، سؤالي هو، هل يمكنني استبدال <c:out> في شفرتي بهذا الإصدار الأقصر؟ هل هناك أي سبب للاستمرار في استخدام <c:out> ؟ أو هل هناك أماكن قد لا تزال بحاجة إليها؟

https://code.i-harness.com


ربما يكون ذلك لأن صفحتي معلنة كالتالي:

<%@ page language="java" contentType="text/html; 
charset=utf-8" pageEncoding="utf-8" isELIgnored="false" %>

غير صحيح. فقط <%@page pageEncoding="UTF-8" %> كانت كافية. بقايا هو بالفعل كل الافتراضي.

إل في نص قالب معتمد منذ جسب 2.0 الذي يسير جنبا إلى جنب مع سيرفليت 2.4 (الذي كان بالفعل منذ عام 2003 ... الحفاظ على نفسك حتى الآن). لذلك عندما تقوم بتشغيل حاوية قادرة سيرفليت 2.4 (مثل تومكات 5.5 أو أحدث) مع web.xml أعلن مطابقة سيرفليت 2.4 أبي، ثم عليك أن تكون قادرا على استخدام إل في نص القالب.

ومع ذلك، يجب عدم استخدامه ل (إعادة) عرض المدخلات التي تسيطر عليها المستخدم . لذلك، لا تستخدمه ل (إعادة) عرض رؤوس طلب (حفظ)، طلب ملفات تعريف الارتباط، طلب عناوين ورل، معلمات الطلب، الهيئات الطلب، وما إلى ذلك وهذا يضع الأبواب مفتوحة لهجمات شس .


<c:out> يفعل أكثر من مجرد إخراج النص. فإنه يهرب من حرف هتمل الخاصة. استخدمها ( or ${fn:escapeXml()} ) في كل مرة لا تتأكد فيها تماما من أن النص لا يحتوي على أي من هذه الأحرف: ", ', <, >, & إلس. هتمل (في أفضل الحالات)، أو صفحة مكسورة، أو هجمات البرمجة عبر المواقع (في أسوأ الحالات).

سأعطيك مثال بسيط بحيث تفهم. إذا كنت تنشئ منتدى، وينشر شخص ما الرسالة التالية، ولا تستخدم <c:out> لعرض هذه الرسالة، فستواجه مشكلة:

<script>while (true) alert("you're a loser");</script>