cgi 规范以下的环境变量是由网关程序实行的请求规范:server_protocol :信息协议的名字和修订版。格式为protocol/revision 。server_port :发送请求的端口号。request_method :请求的方法。对于http,有"get"、 "head"、 "post"等等。path_info :额外的路径信息,由客户端给出的。换句话说,脚本可以由他们的虚拟路径名来访问,在这个路径的末尾附带额外的信息。这个额外信息被作为paht_info发送。这个信息如果在传递给cgi脚本之前来自url就可以由服务器来解码。 path_translated :服务器提供了一个paht_info的转换版本,它需要路径并且为它做虚拟到物理的映射。script_name :将要执行的脚本的一个虚拟路径。query_string :在引用脚本的url中紧跟在?之后的信息。这是一个查...
cgi 规范 本节教程是cgi/1.1的规范,更高版本的协议是向下兼容的,也就是说cgi/1.1的规范同样使用于更高版本的规范。 服务器于cgi脚本有四种主要的方法进行通讯:环境变量、命令行、标准输入和标准输出。cgi环境变量的规范 为了传递关于从服务器到脚本的信息请求的数据,服务器使用了命令行参数比如环境变量。这些变量是在当服务器执行网关程序时被设置的。下面的环境变量不是特殊请求而是为请求的设置server_software :相应请求的信息服务软件的名字和版本,其格式为name/version ;server_name :服务器的主机名或者ip地址。gateway_interface :服务器遵从的cgi规范的修订版。格式为:cgi/revision...
编写安全的cgi脚本 不管在什么时候,一个程序与网络客户端联系的时候,就有可能客户端会攻击这个程序以获得未授权的访问。即使是无恶意地看看你的脚本也会你的系统的完整型构成危险。出于这种想法,本节教程将教你编写安全的脚本以避免任何的攻击。 首先要注意eval语句。perl和bourne shell语言为用户提供了一个eval命令,它允许你构造一个字符串并且有个注释器来执行这个字符串。这是一个不安全的隐患。我们来观察一下以下的语句,它是用bource shell编写的:eval `echo %24query_string awk 'begin{rs="&"} {printf "qs_%sn",%241}' ` 这条语句将查询字符串转换未一系列的可变的设置命令。但是不幸的是,这个脚本可以通过发送给它一个以逗号”;”开头的查询字符串来攻击。看看这有多么的危险! 其次,不要委任客户端做任何...
记录用户记录脚本//以下是mas_res程序#include "t99_type.h"#include #include #include #include #include #include #include #include "parse.h"#include "parse.cpp"#include "mas_cvo.cpp"void write_log_entry( char[], char[] );void cgi_var_output();char* getenv_n( char [] );void gif_output( char [] );int main(){char *query_str = getenv("query_string");parse list( query_str == 0 ? (char*)"file=mas&page=test&" : ...
记录用户记录脚本 在<img>标签使用一个指定cgi脚本的url,可以在图象被传递之前进行额外处理。额外的处理记录了有关网页当前用户的详细信息。这个额外信息将发送给cgi脚本来指定action的正确的详细数据。比如 :格式化的文本 html . <img src="/cgi-bin/mas_rec?page=html&file=log&img=dot.gif"alt="record not made"> 语句中的cgi脚本mas_rec是用c++编写的,它发送以下的信息:参数名字 要求 file 文件的名字,在上面用法信息将被附上 page 网页的名字,它将被记录在日志中 img 要装载的图片...
解码数据发送给cgi脚本下面举个例字,如果query_string包含以下内容:tag=one&name=mike&action=%2b10%25&tag=two&log=~mas/log&tag=three 那么以下的程序将被编译和运行: enum bool { false, true };#include #include #include "parse.h"#include "parse.cpp"void main(){char *query_str = getenv("query_string");parse list( query_str );cout << "name = " << list.get_item_n( "name" ) << "n";cout << "action= " &l...
解码数据发送给cgi脚本这个类的成员函数有:方法 任务 parse 设置将要解析的字符串 set 设置一个要解析的不同字符串 get_item 返回字符串有关的关键字作为参数传递,如果没有数据就返回null get_item_n 返回字符串有关的关键字作为参数传递,如果没有数据就返回空字符串 当使用成员函数get_item和get_item_n的时候,可选的第二个参数指定哪个跟关键字有关的字符串被返回。这样就允许恢复附在同一关键字的信息。另外,返回的字符串将有以下一系列的替代物:+将被转换成空格;%hh将把十六进制的数转换为字符;~user将被用户主目录的完整路径取代,这也只有在可选第三个参数为true的时候才可以。...
解码数据发送给cgi脚本 当使用表单的时候,收集在表单的信息给发送给cgi脚本用于处理。这个信息被放置在环境变量query_string中。 为了清除地将信息传递给环境变量query_string,被修改锚标签的表单将被使用。在这个被修改的锚标签中,传递给环境变量query_string的数据是在指示cgi脚本的url之后附上的。字符”?”被用来分隔指定cgi脚本以及发送给脚本的数据的url。比如:<a href="/cgi-bin/script?name=your+name&action=find"> link </a> 其中数据"name=your+name&action=find"被放置在环境变量query_string中并且cgi脚本被执行。 下面给出一个例子:由c++编写一个类,具体文件parse.h 和parse.cpp被用于在query...
调用cgi脚本文件的例子//以下是mas_cvo.cpp文件#include "t99_type.h"#include #include inline void html( char str[] ) { cout << str << "n"; }inline void html_( char str[] ) { cout << str; }inline void html_( char c ) { cout << c; }// 传递调试选项 // 可以由脚本看到的环境变量char* getenv_n( char var[] ){char *p = getenv( var );return p == null ? (char*)"[]" : p;}void cgi_var_output( ){html("");html("");html( "...
调用cgi脚本文件的例子上面的程序当然还需要两个文件,即t99_type.h和mas_cvo.cpp。具体代码请看下一页。如下://以下是t99_type.h文件#ifndef mas_type#define mas_type#ifndef __turboc__# define __turboc__ 0x0000#endif#define v5 (__turboc__ >= 0x0500 )#define v4 (__turboc__ >= 0x0400 && __turboc__ <= 0x0499 )#define v3 (__turboc__ >= 0x0300 && __turboc__ <= 0x0399 )#if v3#define does_not_have_bool#define does_not_have_st...
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器