Apache指南:服务器端包含入门(SSI)

07 - vulhub - Apache SSI 远程命令执行漏洞 漏洞名称:Apache SSI 远程命令执行漏洞文末 “修复建议” 有 SSI 配置解读SSI简介:漏洞复现之前,要知道SSI是什么,那么SSI是什么呢?SSI----即server-side includesSSI功能:SSI提供了一种对现有HTML文档增加动态内容的方法,不需要编写复杂的JSP/PHP/ASP等程序或者调用CGI程序。SSI用法:SSI的语法格式类似HTML的注释,因此正确启用SSI之后,浏览器可以忽略他但是源码仍然可见,服务器会对特定的SSI指令解析,从而实现少量动态内容的添加。文末 阅读详情

Apache指南:服务器端包含入门

服务器端包含提供了一种对现有HTML文档增加动态内容的方法。

top

概要

本文针对服务器端包含(Server Side Includes),通常简称为SSI,讨论如何配置服务器以允许SSI,并介绍一些对现有HTML页面增加动态内容的基本SSI技术。

本文后部将讨论用SSI做一些应该算比较高级的事情,比如SSI指令中的条件语句。

top

什么是SSI?

SSI (Server Side Includes)是HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。

对什么时候用SSI,而什么时候用某些程序生成整个页面的权衡,取决于页面中有多少内容是静态,有多少内容需要在每次页面被提供时重新计算。SSI是一种增加小段信息的好方法,诸如当前时间。如果你的页面大部分是在被提供时生成的,那就要另找方案了。

top

配置服务器以允许SSI

要使服务器允许SSI,必须在httpd.conf文件或.htaccess文件中有如下配置:

Options +Includes

告诉服务器以允许解析文件中的SSI指令。注意,在多数配置中,多个Options指令会互相覆盖,所以,可能必须对需要SSI的特定目录使用Options,以确保位于最后并起作用。

并不是所有文件中的SSI指令都会被解析,所以,必须告诉Apache应该解析哪些文件。有两种方法,使Apache解析带有特定文件后缀的任何文件,比如.shtml, 配置如下:

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

这种方法的缺点之一是,为了使文件名有.shtml后缀从而执行其中的指令,可能需要改变加入SSI指令的现有的文件,以及所有指向此页面的连接。

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

XBitHack on

XBitHack告诉Apache解析有执行权限的文件中的SSI指令。如此,只要用chmod使文件变成可执行的,就可以对现有的页面增加SSI指令。

chmod +x pagename.html

这里简要说明一点:偶然会有人向你推荐,无须用带.shtml的文件名,使Apache解析所有.html文件的SSI就可以了。那些人可能没听说过XBitHack。要知道,这样做会使Apache在发送文件到客户端之前通读此文件,即使其中并没有任何SSI指令,从而对速度有不小影响,所以这并不是好办法。

当然,在Windows上,没有对应的执行权限可以设置,但还是应该谨慎选择。

按缺省配置,Apache不会为SSI页面发送最后修改日期或者内容长度的HTTP头,因为这些值对动态页面来说难以计算。这样会阻止页面被缓冲,导致客户端性能有能够感觉到的下降。有两种解决方法:

  1. 使用XBitHack Full配置。它告诉Apache判断最后修改日期时,只查看被请求的文件本身的日期,而忽略其中包含的任何文件的修改日期。
  2. 使用mod_expires提供的指令为文件设置一个明确的过期时间,并告诉浏览器和代理这个文件可以被缓冲。
top

基本SSI指令

SSI指令有如下语法:

<!--#element attribute=value attribute=value ... -->

其格式很象HTML的注释,因此如果没有正确配置SSI,它会被浏览器忽略,但在HTML代码中仍然可见。而如果正确配置了SSI,则此指令会被其结果替代。

其中的元素可以有许多,我们会在下一个版本的文档中讨论其中的大多数,而在这里,仅举几个SSI的例子。

今天的日期

<!--#echo var="DATE_LOCAL" -->

echo元素仅仅是反馈一个变量的值。标准变量有许多,其中包含对CGI程序有效的所有的环境变量。另外,你也可以用set元素定义你的专用变量。

如果你不喜欢日期的这种打印格式,可以用config元素的timefmt属性,改变其格式。

<!--#config timefmt="%A %B %d, %Y" -->
Today is <!--#echo var="DATE_LOCAL" -->

文件的修改日期

This document last modified <!--#flastmod file="index.html" -->

这个元素也是使用timefmt的格式配置。

包含一个CGI程序的输出

这是SSI的很常见的一个用途-包含一个CGI程序的输出,比如人人喜欢的``点击计数器''。

<!--#include virtual="/cgi-bin/counter.pl" -->

top

附加的例子

以下是一些对HTML文档使用SSI的特殊例子。

文档是什么时候被修改的?

此前,我们提到过可以用SSI通知用户文档是什么时候被修改的,但是其具体实施方法却基本上是个问题。以下代码,放在HTML文档中,会在页面中产生一个时间戳,当然,首先,你必须按上述方法使SSI有效。

<!--#config timefmt="%A %B %d, %Y" -->
This file last modified <!--#flastmod file="ssi.shtml" -->

不用说,你应该用你实际引用的文件名来替换ssi.shtml,所以,如果你想简单地在任何文件中粘贴一段通用代码以达到这个目的,这个方法就并不方便,如此,就会用到LAST_MODIFIED变量:

<!--#config timefmt="%D" -->
This file last modified <!--#echo var="LAST_MODIFIED" -->

有关timefmt格式的细节,可以到搜索站点查找strftime,其语法是相同的。

包含一个标准注脚

如果你管理一个拥有许多页面的站点,你会发现对所有页面做改动是很痛苦的,尤其是在试图对所有页面维持某种标准观感的时候。

使用包含一个页眉和/或注脚的方法,可以减轻修改的负担。你只要制作一个注脚文件,并用includeSSI命令包含到每个页面,即可。include元素能按file属性或者virtual属性判断应该包含的文件。file属性是一个相对于当前目录的文件路径,即不能是一个绝对文件路径(以/开头)。virtual属性可能更有用,它是一个相对于被提供文档的URL,可以以/开头,但必须与被提供文档在同一个服务器。

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

SSI指令和注脚文件相结合使用是很有用的,比如在注脚文件中使用LAST_MODIFIED指令。SSI指令可以出现在包含文件中,而include可以嵌套,即一个包含文件可以包含另一个。

top

其他的设置

config除了能设置时间格式,还有两种用途。

当SSI指令发生错误时,会产生如下消息:

[an error occurred while processing this directive]

为了改变消息的形式,可以使用config元素的errmsg属性:

<!--#config errmsg="[It appears that you don't know how to use SSI]" -->

当然,最终用户永远也不会看到这个消息,因为在网站投入运行之前你已经把这些问题都解决了(是吗?)。

还可以使用config的sizefmt属性设置返回的文件大小的格式,或者是以字节为单位,或者是以Kb或Mb为单位的简写。

top

执行命令

我期望未来几个月内能再写一篇小型CGI程序使用SSI的文章,而这里,仅介绍exec的使用。SSI确实可以利用shell(/bin/sh,精确地说,还可以是Win32中的DOS shell)来执行命令。下例产生一个目录列表:

<pre>
<!--#exec cmd="ls" -->
</pre>

在Windows中:

<pre>
<!--#exec cmd="dir" -->
</pre>

你可能会发现,在Windows中这个指令的结果有些奇怪,dir的输出中包含有字串``<dir>'',它会使浏览器产生混淆。

注意,这个功能是极度危险的,因为它会执行任何包含在exec标记中的命令。如果用户有可能修改你的网页内容,比如“留言本”,那么你一定要关闭这个功能。在Options指令中加上IncludesNOEXEC参数,以关闭exec功能,同时又保留SSI。

top

高级SSI技术

除了分离内容,Apache SSI还可以设置用以比较和条件表达式的变量。

警告

本文中讨论的大多数功能仅在Apache 1.2及更新版本中有效。如果你运行的不是Apache 1.2及更新版本,请立刻或者尽快升级,现在就动手,我们会等你弄好了再继续往下讲。

设置变量

使用set指令可以设置变量以备后用,其语法是:

<!--#set var="name" value="Rich" -->

除了设置文字变量以外,还可以设置其他任何变量,比如环境变量和此前提到过的一些变量(如LAST_MODIFIED),作为你的专用变量。在变量名前面缀以$,表示它是一个变量,而不是一个文字性字串。

<!--#set var="modified" value="$LAST_MODIFIED" -->

在文字性字串中使用$,必须使用转义符号/

<!--#set var="cost" value="/$100" -->

最后,如果要在较长的字串中,可以用花括号把变量名括起来,以免变量名与其他字符之间冲突而产生混淆(要对这种情况举例说明有点难度,但还是希望你能领会)。

<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->

条件表达式

有了变量,就可以设置和比较它们的值以表示条件,SSI也因此成为一种简洁的编程语言。mod_include提供了if, elif, else和endif等结构以构造条件语句,从而对一个实在的页面高效地生成多个逻辑的页面。

条件的结构如下:

<!--#if expr="test_condition" -->
<!--#elif expr="test_condition" -->
<!--#else -->
<!--#endif -->

test_condition可以是任何逻辑比较 - 可以是一个值和另一个值比较,也可以是测试一个特定的值是否为“真”(一个给定的字串如果非空则为真)。完整的比较操作符列表,见mod_include。以下是可能会用到的一些例子。

在配置文件中,可以这样设置:

BrowserMatchNoCase macintosh Mac
BrowserMatchNoCase MSIE InternetExplorer

如果客户端在Macintosh上运行Internet Explorer,则上例设置环境变量``Mac'' 和``InternetExplorer''为真。

然后,在允许SSI的文档中,可以这样设置:

<!--#if expr="${Mac} && ${InternetExplorer}" -->
Apologetic text goes here
<!--#else -->
Cool JavaScript code goes here
<!--#endif -->

我一点也不反对在Mac上运行IE - 只是上个星期我花了好几个小时试图在Mac上的IE中使用JavaScript,而它在其他地方都能正常运作,以上只是一个临时的妥协方案。

任何其他变量(或者是你定义的,或者是标准的环境变量)都可以用于条件语句。利用Apache的SetEnvIf以及其他相关指令设置环境变量,此功能可以很好地实现动态页面而无须借助于CGI。

top

总结

SSI固然不能替代CGI或者其他动态页面技术,但它是在页面中插入众多小型的动态片段的优秀方法,而无须大量额外的操作。

 原文出自: http://www.uplinux.com/download/doc/apache/ApacheManual/howto/ssi.html
搭建自己的MQTT服务器,实现设备上云(Ubuntu+EMQX) 这篇文章教大家在ECS云服务器上部署EMQX,搭建自己私有的MQTT服务器,配置EMQX实现设备上云,设备数据转发,存储;服务器我采用的华为云的ECS服务器,系统选择Ubuntu系统。 阅读详情

相关推荐

用MATLAB从零实现六足机器人步态仿真:交替三角与波动步态保姆级教程

本文详细介绍了如何使用MATLAB从零实现六足机器人的两种经典步态仿真:交替三角支撑步态和波动步态。通过参数定义、相位设置、运动轨迹生成和三维可视化等步骤,帮助读者掌握六足机器人步态规划的核心技术。教程包含完整代码和详细解析,适合机器人爱好者和相关专业学生学习实践。

weixin_26765363的博客 221

Apache SSI 远程命令执行漏洞

接上一篇文章。

qtttgeq的博客 780

[模型部署]-[LLM]昇腾部署Qwen3-Coder-30B-A3B-Instruct

摘要:本文介绍了在Ascend NPU上部署Qwen3-Coder-30B-A3B-Instruct大模型的实践过程。通过vLLM-Ascend框架,详细说明了环境准备(CANN 8.1、PyTorch-NPU 2.5.1等)、模型下载、容器启动及服务部署步骤,包括vLLM服务的启动参数配置和接口测试方法。测试结果显示在当前2卡910B3配置下性能表现仅为8token/s(1并发),并指出流式调用时存在无法输出usage信息的问题。该方案为Ascend平台私有化部署大模型推理服务提供了参考实现。

1664

Apache 如何支持SHTML(SSI)的配置方法

什么是shtml,什么是SSI,其实是一回事。先说SSI吧,SSI全称是Server Side Including,即服务器端包含文件。简单的说,就是静态网页中可以包含静态网页,而不是使用框架。我们知道,要在一个页面中包含另一个页面,动态语言如ASP、PHP等可以做到,但不使用动态语言的情况下,SSI就是一个很方便的技术。

31IDC的博客 424

AMD显卡跑Ollama大模型?手把手教你搞定Windows下GPU识别与加速(以RX 9600XT为例)

本文详细指导如何在Windows系统下使用AMD显卡(如RX 9600XT)运行Ollama大模型,解决GPU识别与加速问题。通过获取非官方Ollama版本、替换ROCm库文件等步骤,实现高效的GPU加速推理,提升大语言模型的运行效率。

weixin_28707365的博客 474

STM32F429移植LVGL9.3.0:从源码配置到双缓冲优化实战

本文详细介绍了如何在STM32F429平台上移植LVGL 9.3.0图形库,涵盖从源码准备、工程配置、显示驱动适配到双缓冲优化等关键步骤。重点解析了利用STM32F429的硬件特性实现高效内存管理和流畅显示性能的实战技巧,为嵌入式GUI开发提供完整解决方案。

q6r7s8t9的博客 1080

Apache SSI远程命令执行漏洞

Apache SSI(Server Side Include),通常称为"服务器端嵌入"或者叫"服务器端包含",是一种类似于ASP的基于服务器的网页制作技术。默认扩展名是 .stm、.shtm 和 .shtml。从技术层面来讲,SSI是一种在静态的shtml文件中根据需求插入内容;SSI其实是一套为web服务器提供的命令,指令的基本格式为:<!--指令名称="指令内容"-->指令名称指令作用#include将文本文件的内容直接插入到文档页面中#echo将环境变量插入到页面中。

weixin_74020633的博客 1396

上海市大数据中心笔试模拟试卷

为帮助考生熟悉上海市大数据中心笔试的题型、考点及答题逻辑,以下整理了一份的模拟试卷,涵盖大数据专业知识、行政职业能力测试(行测)、公共基础知识(含上海本地政策)三大核心模块,并附详细答案解析。

一叶之秋的博客 1810

Apache指南:服务器端包含入门(SSI)

来源:http://man.chinaunix.net/newsoft/ApacheManual/howto/ssi.html#page-header  Apache指南:服务器端包含入门服务器端包含提供了一种对现有HTML文档增加动态内容的方法。概要什么是SSI?配置服务器以允许SSI基本SSI指令附加的例子其他的设置执行命令高

xymyeah 1107

Winform美化框架AntdUI中Table的使用方法

使用核心注意点: 数据模型中属性名需要完全与new Column里的列名一致否则添加数据源则无法读取到详细内容。

wevix的博客 3661

杰理外挂flash使用教程(四):制作fat32文件系统格式的资源文件

本文档提供了FAT文件系统镜像生成与资源打包的完整指南,包含两种实现方案:推荐的WSL/Ubuntu环境方案和Windows原生方案。详细说明了从创建空白镜像、格式化、资源文件复制到最终打包为设备可用的res.bin文件的完整流程,并对比了FAT32与FAT16的特性差异。文档还包含关键文件说明、使用注意事项和典型应用场景,适用于嵌入式系统开发、固件升级等场景。

qq_42014563的博客 1330

Apache下启用SSI(服务器端包含,shtml)

如果你需要在Apache中启用SSI,最简单的办法就是修改http.conf配置文件,在任一地方加入如下代码:D:/webroot/"> (这里修改为需要启用SSI的网站目录)Options IncludesAddType text/html .shtmlAddOutputFilter INCLUDES .shtml至于上述中几条指令的具体含义,请参看《Apache指南:服务器端包含入门》获得详细

C'est la vie de Maxime 558

仿真学习系列(四十九):Sigrity仿真之电容库制作

在高速电路设计中,电源完整性(PI)是确保系统稳定、可靠运行的关键因素。随着电子产品对性能的要求不断提升,PDN(电源分配网络)的设计与优化变得尤为重要。为了确保电源网络在高速工作状态下不会引发电压波动和信号干扰,我们需要在设计中精确地选择电容器进行优化,而电容库的制作则是这一过程的核心。 OptimizePI作为一个强大的电源完整性优化工具,能够帮助设计师根据不同的目标,批量进行PDN仿真,以得出最佳电容选择。

案例文章,高速信号 218

Apache源代码解析之服务器端包含SSI

节选自《Apache源代码解析-基于Apache0.6.5》第七章。网址:http://www.oldapache.org论坛:http://bbs.oldapache.org邮箱:tsingien@gmail.com  7.1概述    现在的Apache本身除了提供静态页面服务之外,还可以通过加载第三方扩展模块方式支持php、jsp等脚本

Apache源代码解析 814

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Apache SSI 使用

Apache SSI(Server Side Include),通常称为"服务器端嵌入"或者叫"服务器端包含",是一种类似于ASP的基于服务器的网页制作技术。 默认扩展名是 .stm、.shtm 和 .shtml。 在技术上,SSI就是在静态HTML文件中,根据需求插入不同的内容。 例如一个article的频道,每一个article内页都生成一个静态的HTML,如此时,header某个位置需

傲雪星枫 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SSI服务器端包含入门

服务器端包含提供了一种对现有HTML文档增加动态内容的方法。 简介 相关模块 相关指令 mod_includemod_cgimod_expires OptionsXBitHackAddTypeSetOutputFilterBrowserMatchNoCase 本文针对服务器端包含(SSI)讨论如何配

刘书的IT博客 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Apache开启SSI配置以及针对shtml开启apache相关设置

SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针。SSI具有强大的功能,只要使用一条简单的SSI命令就可以实现整个网站的内容更新,时间和日期的动态显示,以及

YoungerChen的专栏 1917

HTML服务器端包括,Apache、Nginx 服务配置服务器端包含(SSI)

如果不知道什么是服务器端包含(ssi)点击后面的链接查看:修改Apache配置文件httpd.conf1. 确认加载include.so模块,将注释去掉:LoadModule include_module libexec/apache2/mod_include.so2. AddType部分去掉这两段注释:AddType text/html .shtmlAddOutputFilter INCLUDE...

weixin_35793573的博客 249

SSI-服务端包含技术

一.什么是SSI? SSI(Server Side Include),通常称为“服务器端包含”技术。使用了SSI技术的文件默认的后缀名为.shtml, SSI技术通过在html文件中加入SSI指令让web服务器在输出标准HTML代码之前先解释SSI指令, 并把解释完后的输出结果和HTML代码一起返回给客户端。 在大部分份的项目中,我们主要使用了SSI中的包含指令, 他的作用类似于JSP中

zjt1388的专栏 1179

Apache Server 服务器端 包含 SSI 方法 笔记

度娘连接:http://baike.baidu.com/view/188371.htm SSI——服务器端嵌入 服务器端嵌入:Server Side Include,是一种类似于ASP的基于服务器的网页制作技术。大多数(尤其是基于Unix平台)的WEB服务器如Netscape Enterprise Server等均支持SSI命令。另外,在计算机硬件领域SSI是同步串行接口(Sync

刨根问底儿拦不住 :-) 1096

Apache SSI 远程命令执行漏洞(SSI注入漏洞)

SSI 服务器端包含 SSI(server-side includes)能帮我们实现什么功能: SSI提供了一种对现有HTML文档增加动态内容的方法,即在html中加入动态内容。 SSI是嵌入HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。 从技术角度上来说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针,即允许通过在HTML页面注入脚本或远程执行任意命令。 在测试任意文件上传漏洞的时候,目标

qq_45521281的博客 4919

Apache--SSI 服务器端包含

(参考apache手册及百度百科:http://baike.baidu.com/view/188371.htm) 访问静态页面时,页面有一个模块无法显示并报错“an error occurred while processing this directive”,查看原html文件,发现该处是通过SSI的命令include进来的:   通过改正引入文件的路径,成功引入。这里做一下笔记: 【

breeze_life 6363

apache和nginx支持SSI配置

为什么80%的码农都做不了架构师?>>> ...

weixin_34357928的博客 177

SSI技术详解

  什么是SSI?SSI直译服务器端包含(Server Side Includes),由字面上看由WEB在服务器提供的一种功能,并且是在服务器端进行的。一般说来,要完成较复杂的任务(如:聊天室/留言本等),必须设计专门的CGI或ASP程序;但是如果只是想给网页加上简单的功能(如:显示一篇文档,web服务器环境变量,关于该文档的更新日期/大小等),则只要SSI就可以完成了。SSI则是直接由服

大伟先生 4993

Apache服务器端包含入门

       以前我们提到静态网页的时候就想到html,动态网页的时候想到“jsp,php,asp”,这似乎成为一种常识。但现实往往告诉我们,常识可能是非常不靠谱的。这不SSI就上了一堂教育课。我感叹SSI的能力,最让我震撼的是它可以执行命令,如下所示:        这是非常夸张地能力了,我觉得这真是一把锋利的匕首,慎用!       以下内容摘自金步国翻译的Apache文档:

李永亮的专栏 874

服务器端文件包含,服务器端包含、嵌入技术SSI(Server SideInc lude)详解

SSI简介SSI在静态文件中非常有用,能分离一些可变的模块,如每日排行榜等。其主要作用有:1.显示服务器端环境变量2.将文本内容直接插入到文档中3.显示WEB文档相关信息 (如文件制作日期/大小等)4.直接执行服务器上的各种程序(如CGI或其他可执行程序)5.设置SSI信息显示格式(如文件制作日期/大小显示方式)6.高级SSI可设置变量使用if条件语句。 apache、nginx等都支持SSI命令...

weixin_28911533的博客 581
上一篇: 好累
下一篇: 唉,病毒,操作系统,好困
秤秤biubiu
博客等级 码龄22年 156粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值