asp.net - использовать ascx в качестве шаблона макета - PullRequest
0 голосов
/ 07 января 2010

Это мой шаблон макета (ascx без кода позади)

<%@ Control Language="C#" AutoEventWireup="true" Inherits="ws.helpers.LayoutUC" %>
<div>blah blah blah</div>
<ws:Panel runat="server" ID="left"></ws:Panel>
<ws:Panel runat="server" ID="main"></ws:Panel>
<ws:Panel runat="server" ID="right"></ws:Panel>

Модули будут добавлены в ws: Panel позже.

Я также разрешаю своему пользователю создавать свои собственные файлы ascx, чтобы настроить макет своей страницы. И из-за этого я делаю строку, заменяющую все опасные части, такие как тег скрипта (runat = "server"), все HTML-теги asp.net, <%, <% @, <# .... из их пользовательских. </p>

Я не беспокоюсь о XSS, поэтому не комментируйте его и спрашивайте, почему?

Я хочу знать, что ты думаешь об этом. Это безопасно? Это масштабируемое? Это стандартный или плохой способ?

Ответы [ 2 ]

1 голос
/ 07 января 2010

Посмотрите на интерфейс INaminingContainer http://msdn.microsoft.com/en-us/library/system.web.ui.inamingcontainer.aspx.

<asp:YourControl>
  <LeftColumn>
    <asp:Literal ID="literal1" runat="server" Text="User created literal" />
  </LeftColumn>
</asp:YourControl>

В .ascx от пользователей они регистрируют ваш элемент управления и вставляют код asp.net в свойства. В классе YourControl вы создаете заполнители и вставляете разметку, установленную для определенного свойства, в эти заполнители. (например, все между <LeftColumn> and </LeftColumn> будет вставлено в

<asp:Placeholder ID="PlaceholderLeftColumn" runat="server"/>

Редактировать : Я подвел итог некоторой проблемы TemplateContainer и разместил ее здесь: http://www.tomot.de/en-us/article/2/asp.net/how-to-create-an-asp.net-control-that-behaves-as-a-template-container-to-nest-content-via-markup

0 голосов
/ 07 января 2010

Вы разрешаете загруженный пользователем контент; это по сути небезопасно, и есть целые книги, посвященные лучшим практикам. Учитывая, что вы все равно это делаете, пока вы проверяете, что вы очищаете входные данные, это масштабируемо? Вы разрешаете создание пользовательских файлов на вашем сайте. Сколько их будет? Сколько пользователей? Как насчет балансировки нагрузки? Это решение не будет масштабироваться для многих пользователей, файлов или серверов.

Похоже, вы пытаетесь создать простую CMS. Почему бы не использовать тот, который существует в настоящее время, или принять части решения с открытым исходным кодом?

...