0

这是我的布局模板(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")、所有 asp.net html 标签、<%、<%@、<#.... 来自他们的自定义。

我不担心XSS,所以不要评论它,问为什么?

我想知道你对此的看法。安全吗?是否可扩展?这是标准还是坏方法?

4

2 回答 2

1

看看 INnamingContainer 接口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

于 2010-01-07T19:07:23.707 回答
0

您允许用户上传的内容;这本质上是不安全的,并且有整本书专门介绍最佳实践。鉴于您无论如何都在这样做,只要您确保清理输入,它是否可扩展?您允许在您的网站上创建用户上传的文件。会有多少?有多少用户?负载均衡呢?此解决方案不适用于许多用户、文件或服务器。

听起来您正在尝试创建一个简单的 CMS。为什么不使用当前存在的解决方案,或者采用部分开源解决方案?

于 2010-01-07T17:21:11.577 回答