【问题标题】:asp.net - Use ascx as a layout templateasp.net - 使用 ascx 作为布局模板
【发布时间】:2011-08-19 14:04:46
【问题描述】:

这是我的布局模板(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,所以不要评论它,问为什么?

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

【问题讨论】:

    标签: asp.net templates ascx


    【解决方案1】:

    看看INamineingContainer 接口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”类中,您创建占位符并将标记集插入特定属性到这些占位符中。 (例如,&lt;LeftColumn&gt; and &lt;/LeftColumn&gt; 之间的所有内容都将插入

    <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

    【讨论】:

    • 那个链接失效了。
    【解决方案2】:

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

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

    【讨论】:

    • 不,他们没有上传任何文件,他们只是在网站上使用我的工具并创建自己的模板并将其保存到服务器上的私人文件夹中。当然我会限制模板的数量。
    • 我的意思是用户创建的文件。他们正在从您的工具创建文件以保存在服务器上的文件夹中,对吗?那么,它安全吗?不,但您与任何用户生成的内容网站(包括这个网站)都存在同样的问题。是否可扩展?不仅仅是,如果您添加更多服务器,还有其他方法可以解决这个问题;参看。 NoSQL 运动。标准做法是将输入存储在数据库中,并在您的 ascx 文件中引用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多