【问题标题】:server side include (SSI) injection issue服务器端包含(SSI)注入问题
【发布时间】:2018-01-14 11:27:41
【问题描述】:

我正在开发 html 网站。我有30多页。所以我正在寻找一种解决方案,我必须在一个页面中使用菜单,然后在所有其他页面上调用该菜单,所以下次我必须进行一些更改时,我只会在一个文件中进行更改。

通过谷歌,我知道我可以将我的文件扩展名从 html 转换为 php 然后使用 <?php include 'menu.php' ?> 。但我不想在这里更改扩展名。

因此出现了另一种解决方案,即服务器端包含 (SSI)。

但这里似乎没有任何改变。 假设我的菜单 div 是:

<div class="menu">
    <div class="page-logo">
        <a href="dashboard.html">
            <img src="assets/img/logo.png" alt="logo"/>
        </a>
    </div>
</div>

所以我将菜单 Div 代码复制到单独的文件中并将其保存为 menu.html 然后像这样使用 SSI

<div class="menu">
    <!-- #include virtual="/menu.html" -->
</div>

但是我的页面上没有出现徽标。我想知道这对其他人是如何工作的,因为据我所知 SSI 命令在 cmets 标签 &lt;!-- COMMENTS --&gt;

任何想法,我在上面做错了什么或者我如何在所有保留 html 扩展名的页面上使用相同的菜单?

我用过这个.htaccess文件

AddType text/html .shtml
AddHandler server-parsed .shtml
Options Indexes FollowSymLinks Includes
AddHandler server-parsed .html .htm

【问题讨论】:

    标签: html ssi server-side-includes


    【解决方案1】:

    对于任何形式的服务器端编程,您都需要将服务器配置为在文件中查找服务器端代码,而不是直接将其传递给客户端。

    您如何执行此操作取决于您使用的特定服务器。如果您使用的是 Apache HTTPD,那么您通常可以使用.htaccess。这是not recommended

    如果您有权访问 httpd 主服务器配置文件,则应完全避免使用 .htaccess 文件。使用 .htaccess 文件会降低 Apache http 服务器的速度。您可以在 .htaccess 文件中包含的任何指令都最好设置在 Directory 块中,因为它具有相同的效果并具有更好的性能。

    发现服务器配置为在 .php 文件中查找 PHP 和在 .shtml 文件中查找 SSI 是很常见的。

    您可以将它们配置为查看其他类型的文件,如果还没有,则开始查看。

    具体操作方式取决于您使用的网络服务器。例如,对于 Apache,the manual has this guide for SSI

    要在您的服务器上允许 SSI,您必须具有以下指令 在您的 httpd.conf 文件或 .htaccess 文件中:

    Options +Includes
    

    这告诉 Apache 您希望允许为 SSI 解析文件 指令。请注意,大多数配置包含多个选项 可以相互覆盖的指令。你可能需要 将选项应用于要启用 SSI 的特定目录 为了确保它最后得到评估。

    不只是为 SSI 指令解析任何文件。你必须告诉 Apache 应该解析哪些文件。有两种方法可以做到这一点。 您可以告诉 Apache 使用特定文件解析任何文件 扩展名,例如 .shtml,带有以下指令:

    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
    

    这种方法的一个缺点是,如果您想添加 SSI 指令到现有页面,您必须更改 该页面以及指向该页面的所有链接,以便为其提供 .shtml 扩展,以便执行这些指令。

    另一种方法是使用 XBitHack 指令:

    XBitHack on
    

    XBitHack 告诉 Apache 为 SSI 指令解析文件,如果它们有 执行位设置。因此,要将 SSI 指令添加到现有页面, 而不必更改文件名,您只需要 使用 chmod 使文件可执行。

    chmod +x pagename.html
    

    关于不该做什么的简短评论。偶尔会看到人 建议您只告诉 Apache 解析所有 .html 文件 SSI,这样您就不必弄乱 .shtml 文件名。这些 人们可能还没有听说过 XBitHack。要记住的事情 是不是,通过这样做,您需要 Apache 通读 它发送给客户的每一个文件,即使他们没有 包含任何 SSI 指令。这会使事情变慢很多,并且 不是个好主意。

    …和the PHP manual has this guide:

    # Make all PHP code look like HTML
    AddType application/x-httpd-php .htm .html
    

    据我所知 SSI 命令在 cmets 标签&lt;!-- COMMENTS --&gt;

    SSI 语法旨在镜像 HTML 注释语法,因此如果服务器无法解析 SSI 文件,则后备位置将是静默失败,而不是破坏页面的其余内容。

    SSI 解析器不会将其视为注释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 2014-08-15
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多