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。