zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    底层原理
    No.1
    No.3
    No.0
    php 10进制转62进制,可用于短网址生成
    php实现斐波那契数列
    五种常见的 PHP 设计模式
    PHP利用MySQL保存session
    HTTP相关
    如何优化tomcat配置(从内存、并发、缓存4个方面)优化
  • 原文地址:https://www.cnblogs.com/vege/p/12465969.html
Copyright © 2011-2022 走看看