SSI服务器端包含注入

服务器端嵌入:Server Side Include,是一种类似于ASP的基于服务器的网页制作技术。大多数(尤其是基于Unix平台)的WEB服务器如Netscape Enterprise Server等均支持SSI命令。

原理

将内容发送到浏览器之前,可以使用“服务器端包含 (SSI)”指令将文本、图形或应用程序信息包含到网页中。例如,可以使用 SSI 包含时间/日期戳、版权声明或供客户填写并返回的表单。对于在多个文件中重复出现的文本或图形,使用包含文件是一种简便的方法。将内容存入一个包含文件中即可,而不必将内容输入所有文件。通过一个非常简单的语句即可调用包含文件,此语句指示 Web 服务器将内容插入适当网页。而且,使用包含文件时,对内容的所有更改只需在一个地方就能完成。

因为包含 SSI 指令的文件要求特殊处理,所以必须为所有 SSI 文件赋予 SSI文件扩展名。默认扩展名是 .stm、.shtm 和 .shtml

 

shtml和asp 有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中写入SSI指令,当客户端访问这些shtml文件时,服务器端会把这些SHTML文件进行读取和解释,把SHTML文件中包含的SSI指令解释出来

比如:你可以在SHTML文件中用SSI指令引用其他的html文件(#include ),服务器传送给客户端的文件,是已经解释的SHTML不会有SSI指令。它实现了HTML所没有的功能,就是可以实现了动态的SHTML,可以说是HTML的一种进化吧。像新浪的新闻系统就是这样的,新闻内容是固定的但它上面的广告和菜单等就是用#include引用进来的。

 

支持

Apache默认是不支持SSI的,需要我们更改httpd.conf来进行配置。我这里以windows平台的Apache 2.0.x为例:打开conf目录下的httpd.conf文件,搜索“AddType text/html .shtml”,搜索结果:

# AddType text/html .shtml

# AddOutputFilter INCLUDES .shtml

把这两行前面的#去掉。

然后搜索“Options Indexes FollowSymLinks”

在搜索到的那一行后面添加“ Includes”

即将该行改变为:

Options Indexes FollowSymLinks Includes

保存httpd.conf,重起apache即可。

开启shtml

打开文件 ./include/config.inc.php <?php

//数据库配置信息

define('DB_HOST','localhost'); //数据库服务器主机地址

define('DB_USER','root'); //数据库帐号

define('DB_PW','root'); //数据库密码

define('DB_NAME','phpcmsutf'); //数据库名

define('DB_PRE','phpcms_'); //数据库表前缀,同一数据库安装多套Phpcms时,请修改表前缀

define('DB_CHARSET','utf8'); //数据库字符集

define('DB_PCONNECT',0); //0 或1,是否使用持久连接

define('DB_DATABASE','mysql'); //数据库类型

//网站路径配置

define('PHPCMS_PATH','/cms/phpcms_utf/'); //Phpcms框架访问路径,相对于域名

//shtml 支持

将它:

define('SHTML',0); //是否支持 shtml,需要服务器支持,并且生成文件扩展名为 shtml

改成:

define('SHTML',1); //是否支持 shtml,需要服务器支持,并且生成文件扩展名为 shtml。

nginx

编辑nginx配置文件 vi /usr/local/nginx/conf/nginx.conf

加入如下代码ssi on;

ssi_silent_errors on;

ssi_types text/shtml;

保存 重启 nginx

 

 

使用

SSI是为WEB服务器提供的一套命令,这些命令只要直接嵌入到HTML文档的注释内容之中即可。如:

<!--#include file="info.htm"-->

就是一条SSI指令,其作用是将"info.htm"的内容拷贝到当前的页面中,当访问者来浏览时,会看到其它HTML文档一样显示info.htm其中的内容。

 

在一些WEB服务器上(如IIS 4.0/SAMBAR 4.2),包含 #include 指令的文件必须使用已被映射到 SSI解释程序的扩展名;否则,Web 服务器将不会处理该SSI指令;默认情况下,扩展名 .stm、.shtm 和 .shtml 被映射到解释程序(Ssinc.dll)。

Apache则是根据你的设置情况而定,修改srm.conf如:

AddType text/x-server-parsed-html .shtml 将只对.shtml扩展名的文件解析SSI指令

AddType text/x-server-parsed-html .html将对所有HTML文档解析SSI指令

Netscape WEB服务器直接使用Administration Server(管理服务器)可打开SSI功能。

Website使用Server Admin程序中的Mapping标签,扩展名添加内容类型为:wwwserver/html-ssi

Cern服务器不支持SSI,可用SSI诈骗法,上下载一个PERL脚本,即可使你的CERN服务器使用一些SSI指令。(不支持exec指令。)

 

 

指令  (https://baike.baidu.com/item/SSI)

 

格式

程序代码:

<!-– 指令名称 参数="参数值"-->

<!-– 指令名称 参数="参数值"-->

如 程序代码:

<!--#include file="info.htm"-->

<!--#include file="info.htm"-->

说明:

1.<!-- -->;是HTML语法中表示注释,当WEB服务器不支持SSI时,会忽略这些信息。

2.#include 为SSI指令之一。

3.file 为include的参数,info.htm为参数值,在本指令中指将要包含的文档名。

注意:

1.<!--与#号间无空格,只有SSI指令与参数间存在空格。

2.上面的标点="",一个也不能少。

3.SSI指令是大小写敏感的,因此参数必须是小写才会起作用。

 

 

<!--#exec cmd="cat /etc/passwd"-->;将会显示密码文件

<!--#exec cmd="dir /b"-->;将会显示当前目录下文件列表

<!--#exec cgi="/cgi-bin/gb.cgi"-->;将会执行CGI程序gb.cgi。

<!--#exec cgi="/cgi-bin/access_log.cgi"-->;将会执行CGI程序access_log.cgi。

<!--#exec cmd="cat /etc/passwd"-->;将会显示密码文件

<!--#exec cmd="dir /b"-->;将会显示当前目录下文件列表

<!--#exec cgi="/cgi-bin/gb.cgi"-->;将会执行CGI程序gb.cgi。

<!--#exec cgi="/cgi-bin/access_log.cgi"-->;将会执行CGI程序access_log.cgi。

 

posted @ 2020-03-11 22:14  yokan  阅读(469)  评论(0编辑  收藏  举报