تكرار السؤال: …
الإجابة المختصرة
يقوم محرك Razor بترميز مخرجات @Model تلقائياً بواسطة HtmlEncoder لتحييد الرموز الخطرة، مع توفير JavaScriptEncoder لتأمين حقن البيانات داخل السكريبتات.
الشرح
في صفحات Razor، يتم تحويل أي نص يطبع بواسطة @Model.Text إلى نصوص مشفرة آمنة (مثل تحويل < إلى <). للبيانات التي تُحقن داخل وسوم <script>، توفر مايكروسوفت دوال JavaScriptEncoder.Default.Encode لمنع كسر سياق المتغيرات. لا يجوز استخدام @Html.Raw إلا لمحتوى نظيف وموثوق تم تطهيره مسبقاً بمكتبات مثل Ganss.Xss.HtmlSanitizer.
مثال بالكود
<!-- مشفر وآمن تلقائياً -->
<p>@Model.UserComment</p>
<!-- خطير جداً ولا يستخدم إلا مع مدخلات موثوقة ومطهرة: -->
<!-- @Html.Raw(Model.UserComment) -->أخطاء شائعة
- استخدام @Html.Raw لعرض تعليقات المستخدمين غير المطهرة مما يفتح ثغرة XSS مخزنة مباشرة.