【问题标题】:Problems with Server-side Includes服务器端包含问题
【发布时间】:2011-01-11 00:10:53
【问题描述】:

我非常想在我正在处理的项目中使用服务器端包含,因为我只有一些重复的 HTML,我需要在多个页面上获取它。 必须我使用 ascx 或其他一些包含技术... 我的意思是,如果我使用服务器端包含会雷击吗?

我的客户——中间人——说“做最简单的事情,无论如何这可能很快就会在 CMS 中重做。”我不能使用服务器端包含吗?

它是 ASP.NET 2.0。

注意:我觉得以前有人问过这个问题,但我找不到。如果有请告诉我,我会亲自删除,谢谢!

编辑:如果您有任何建议,我可以通过任何方式在一行中获得包含。

编辑:为什么我喜欢包含?

包含代码:

!--#include file="inc_footer.aspx"-->

控件的代码相同。首先你需要其中一个

<%@ Register TagPrefix="a" TagName="HeyFooter" Src="inc_footer.ascx" %>

然后你就可以这样使用了

<a:HeyFooter runat="server" />

这对于我需要的东西来说有点长。

注意 include 的两个安全问题:1) 不要使用 .inc 扩展名,因为它可以被浏览。 2)不要包含基于用户变量的文件名,作为最佳答案。

【问题讨论】:

  • 您为什么如此热衷于避免用户控制?对我来说似乎没有任何额外的努力。
  • @Nick Higgs,有没有办法将所有代码放在一行上?我不想输入两行代码——其中一个定义标签,另一个使用它——来获得一个简单的包含。我知道这很可悲,但我真的只需要包含一些 HTML。另外,你知道,“尽可能简单”之类的。无论如何,请输入最短的代码来执行 ASCX,并将其与答案中的包含进行比较。也许我不知道可以省略什么......
  • @yar:在我看来,“尽可能简单”是指不要使用服务器端包含,默认关闭,会导致安全问题,并且没有人再使用了。
  • @John Saunders,它们是被弃用还是只是“未使用”?它们会导致什么安全问题。这正是我要问的。
  • @yar:服务器端包含的内容远不止插入一大段 html。如果您启用 SSI,您的网站就会面临许多问题,其中大部分已被遗忘。关于 SSI,我只记得不要使用它们的警告。另请注意,默认情况下它们是关闭的 - 这是有原因的。

标签: asp.net server-side server-side-includes


【解决方案1】:

如果您通过字符串变量包含文件:&lt;!--#include file=some_variable --&gt;,那么根据该变量的填充方式,黑客可能会进行攻击以包含他自己的文件并在您的计算机上运行任意代码。但是只要使用字符串字面量,就不会遇到这个问题。

我会在 ASP.NET 中使用Master Pages。这是拥有页面公共区域的公认方式。

您将像创建常规页面一样创建母版页,然后对其他每个页面的修改将是最小的。在每个页面文件的顶部添加一行,然后指定使用的部分。

【讨论】:

  • 除了老派之外,服务器端还有什么问题?
  • 如果您消除了服务器端包含的潜在安全威胁,那么它们确实没有任何问题。我只是更喜欢母版页以及您可以用它们做的所有有用的东西。
  • 很酷,谢谢,我正在努力不对这个特定项目做任何有趣的事情:)...安全风险是什么?您必须将它们命名为 .aspx,仅此而已?
  • 如果您通过字符串变量包含文件:&lt;!--#include file=some_variable --&gt;,那么根据该变量的填充方式,黑客可能会进行攻击以包含他自己的文件并在您的计算机上运行任意代码.但是只要使用字符串字面量,就不会遇到这个问题。
  • 酷,你能把它放在你的答案中,这样我就可以投票并标记为最佳答案吗?虽然母版页很好,而且所有...
【解决方案2】:

不,如果您想保持简单,您绝对不需要使用花哨的 .NET Web 表单方式来执行此操作。只需将其放在您想要插入的位置即可:

<!--#include virtual="../repeatStuff/fun.html" -->

html 将显示在那里。我给了一个上下另一个目录的路径。这是“最简单的”,但也有非常直截了当的优点。请注意,这不会显示在您的视觉设计器中。 (反正我从来没用过。)

【讨论】:

  • 视觉设计师...那是什么?我只在车上使用语音识别软件进行编码,然后我说“部署”。
  • 所以,你只是在工作之间来回开车?我想您可能会停下来开会,然后开车回家并返回生成代码。我自己只有两个按钮,分别是 0 和 1;这就是我所使用的。我通常将代码直接投入生产,以避免部署问题。
【解决方案3】:

我仍然不时地使用 include 来达到你描述的目的。

您实际上并不需要注册用户控件,因为它只是普通的 html。而且您不需要母版页,因为它实际上只是需要在几个选定页面上的 html 的 sn-p。

所以我从帮助文本文件的词汇表中得到了这样的包含:

<!--#include file="~/Glossary/BusinessDetails.inc"-->

在我看来,为此目的使用老式包含文件没有任何问题。

【讨论】:

  • 酷,谢谢。老实说,我正试图激怒不使用包含的警察,因为我知道他们就在那里。但是现在 +1 :)
猜你喜欢
  • 2018-01-14
  • 2010-11-18
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多