Web server and_cgi

26
1 Copyright © 2009, Cameo Communications, Inc. All rights reserved. 2009/09/03 Web Server & CGI Speaker: Lingling Wang

description

mang kinds of cgi interface

Transcript of Web server and_cgi

Page 1: Web server and_cgi

1Copyright © 2009, Cameo Communications, Inc. All rights reserved. 2009/09/03

Web Server & CGI

Speaker: Lingling Wang

Page 2: Web server and_cgi

222Copyright © 2009, Cameo Communications, Inc. All rights reserved.

Web Server & CGI

Web Server Web Server 简介 Web Server 环境配置 Web Server 工作原理

Page 3: Web server and_cgi

333Copyright © 2009, Cameo Communications, Inc. All rights reserved.

Web Server 简介

Web Server 网页服务器 WWW(WORLD WIDE WEB) 服务器

主要功能 提供网上信息浏览服务

• 提供 Web 文件的存放空间;• 传送和管理 Web 文件;• 支持各种 Web 程式;

Page 4: Web server and_cgi

444Copyright © 2009, Cameo Communications, Inc. All rights reserved.

Web Server 环境配置

主流 Web 服务器软件 Apache

• 开源,免费• Linux, Unix, Windows…

• 安装复杂• 稳定 , 安全• ……

IIS (Internet Information Service)

• Windows OS 绑定的组件• 安装简单• IIS6.0 较稳定,安全• ……

Note : Web 服务器软件的选择主要参考服务器端的操作系统及当前应用等。

Page 5: Web server and_cgi

555Copyright © 2009, Cameo Communications, Inc. All rights reserved.

Web Server 环境配置

Note: 安装完成后,在系统盘下会产生一个 Inetpub 的目录 , 这是 IIS 的主目录。 Inetpub

• wwwroot - web 站点的默认主目录;• scripts - IIS 会创建一个虚拟目录 SCIPTS 指向该目录,并且给这个

目录执行权限。此目录存在安全隐患。 • AdminScripts -存放 IIS的Web 方式管理脚本文件;• iissamples- IIS 帮助和实例文件存放目录;• mailroot - smtp 服务主目录;• ftproot - ftp 站点的默认主目录;

Web Server Installation.pdf

http://172.22.102.123

Page 6: Web server and_cgi

666Copyright © 2009, Cameo Communications, Inc. All rights reserved.

Web Server 环境配置

虚拟目录 从主目录以外的其他目录中进行发布,必须创建虚拟目录。 虚拟目录不包含在主目录中,但在显示给客户端浏览器时就象

位于主目录中一样。 虚拟目录有一个“别名”,供 Web 浏览器访问此目录时使用。

由于别名通常要比目录的路径名短,因此便于用户输入。使用别名更加安全,因为用户不知道文件在服务器上的实际位置,所以无法使用此信息修改文件。使用别名可以更方便地在站点中移动目录,原因在于不需要更改目录的 URL ,只需更改别名与目录实际位置之间的映射即可。

Page 7: Web server and_cgi

777Copyright © 2009, Cameo Communications, Inc. All rights reserved.

Web Server 工作原理

浏览器将 URL 分解为三个部分 协议(“ http” ) 服务器名(“ 172.22.102.123” ) 文件名(“ chunhua.html” )

工作原理图

http://172.22.102.123/chunhua.html

Page 8: Web server and_cgi

888Copyright © 2009, Cameo Communications, Inc. All rights reserved.

Web Server 工作原理

工作原理步骤 Step1: Web 浏览器根据客户提供的 URL 链接相关的 Web 服务器

; Step2: 如果能和 Web 服务器链接上,浏览器将把整个 URL 传送给Web 服务器;

Step3: Web 服务器根据 URL 所提供的路径查询 Web 浏览器所需要的资源,并将该资源传送给 Web 浏览器;

Step4: Web 服务器中断和浏览器的链接 Step5: Web 浏览器显示 Web 服务器传回的 Web 页面

Page 9: Web server and_cgi

999Copyright © 2009, Cameo Communications, Inc. All rights reserved.

Web Server & CGI

CGI

CGI 简介 CGI 环境配置 Server - CGI 工作原理 CGI 预备知识 CGI 编程 CGI 安全问题

Page 10: Web server and_cgi

101010Copyright © 2009, Cameo Communications, Inc. All rights reserved.

CGI 简介

CGI(Common Gateway Interface) CGI (通用网关接口),即 Web 服务器主机提供信息服务的标

准接口,通过该接口, Web 服务器能够执行应用程式并将它们的输出,如文字、图形、声音等传送给一个 Web 浏览器。一般来说, CGI 标准接口的功能就是在 HTML 文档与服务器应用程式之间传递信息。

CGI 标准接口主要解决以下几个问题:• Web 服务器和 CGI 程式之间如何传递信息?• Web 服务器向 CGI 程式传送什么信息?• Web 服务器向 CGI 程式传送信息的格式是什么?• CGI 程式向 Web 服务器返回什么信息?• CGI 程式向 Web 服务器返回信息的格式是什么?

Page 11: Web server and_cgi

111111Copyright © 2009, Cameo Communications, Inc. All rights reserved.

CGI 简介

CGI 程式( .cgi )语言 编译型语言

• C/C++

• Visual Basic

• …

解释型 • Perl

• Shell

• AppleScript

• …

Page 12: Web server and_cgi

121212Copyright © 2009, Cameo Communications, Inc. All rights reserved.

CGI 环境配置

环境配置讲解 CGI(C, Perl) 环境配置 .pdf

示例 CGI(C)

• testIsLinked.html - simpleAnswerServer.c

– http://172.22.102.123/html/testIsLinked.html

CGI(Perl)

• Perl 简介 (Larry Wall )

– There's More Than One Way To Do It!

• testIsLinked(Perl).html – simpleAnswerServer(Perl).pl

– http://172.22.102.123/html/testIsLinked(Perl).html

Page 13: Web server and_cgi

131313Copyright © 2009, Cameo Communications, Inc. All rights reserved.

Server- CGI 工作原理CGI 工作步骤 :

Step1: 客户端发出请求 Step2: Web 服务器激活 CGI 程序 Step3: CGI 程序对客户端的请求做出反应 Step4: Web 服务器将 CGI 的处理结果传

送给客户端 Step5: Web 服务器中断和客户端浏览器

的链接 Step6: Web 浏览器将 CGI 程序的输出显

示到浏览器的窗体Note:

1. 如果请求时一个普通的文件(如 HTML文件、 GIF或 JPEG 文件), Web 服务器将文件直接传送给客户端的浏览器。如果是 CGI 程式,服务器激活 CGI 程式。

2. 在 CGI 程式被执行前, Web 服务器要为CGI 程式设置一些环境变量。 CGI 程式结束,环境变量也随着消失。

Page 14: Web server and_cgi

141414Copyright © 2009, Cameo Communications, Inc. All rights reserved.

CGI 工作原理

浏览器

表单

浏览器将表单数据编码后传递给

服务器

Web 服务器

处理数据的CGI程式

提交CGI处理程式

返回处理结果

用户填写表单

Web服务器将CGI程式处理结果返回给浏览器

表单、服务器和CGI之间的关系

表单、服务器和 CGI 之间的关系

Page 15: Web server and_cgi

151515Copyright © 2009, Cameo Communications, Inc. All rights reserved.

CGI 预备知识- STDIN/STDOUT

STDIN/STDOUT 文件句柄 STDOUT: 屏幕 STDIN: 键盘 重定向 管道连接 : 一个程式的标准输入 / 输出( STDIN/STDOUT )也可以

和另一个程式的标准输出 / 输入相连

CGI 程式输入 / 输出信息 CGI 程式输入 / 输出信息方式与普通程式不一样 !!!

对于 CGI 程式来说,当 CGI 程式被服务器激活后,其标准输入链接到Web 服务器的标准输出,标准输出则被连到服务器的标准输入,形成管道链接。

Page 16: Web server and_cgi

161616Copyright © 2009, Cameo Communications, Inc. All rights reserved.

CGI 预备知识- STDIN/STDOUT

Web 服务器-客户端和 CGI 程式间的中介 Web 服务器将 Web 浏览器传送来的信息放在它的标准输出和环境变量中; CGI 程式从它的标准输入 (即Web 服务器的环境变量和标准输出 )获取信息

, 并将最终输出结果写向它的标准输出 (即Web 服务器的标准输入 ) ; Web 服务器从它的标准输入(即 CGI 程式的标准输出)获取 CGI 程序的输

出结果并将它传送给 Web 浏览器。

标准输入

标准输出

环境变量

CGI程式

Web浏览器 Web服务器

输出

输入

输入

输出

Web浏览器和CGI程式之间的交流

标准输出

标准输入

Page 17: Web server and_cgi

171717Copyright © 2009, Cameo Communications, Inc. All rights reserved.

CGI 预备知识- GET/POST

GET 客户机把表单中的信息附加到由 action属性标记命名的 URL 的末尾,用

一个问号把经过 URL 编码后的信息与 URL 名字分开; 受到 URL长度的限制,只能传递大约 1024 字节,且内容在 URL 中显示

; 要传输的信息由 http头部传输的; 缺省方法;

POST 要传输的信息作为 http 请求的内容,传输的数据量大,可以达到 2M ; 传输的信息不在 URL 中显示出来;

Note: 顾名思义 , Post 主要为了将数据传送到服务器端 ; Get 主要从服务

器端取得数据。

Page 18: Web server and_cgi

181818Copyright © 2009, Cameo Communications, Inc. All rights reserved.

CGI 预备知识- URL 编码 / 解码

U RL 编码-浏览器打包表单输入的格式 浏览器从表单获取所有的 name 和其值 ,将它们以 name/value 参数编码作发给服务器;

每对 name/value 由 & 符分开; name/value 由 = 符分开。如果用户没有输入值给这个 name, name 及 = 符出现,无值;

空格用‘ +’代替; 保留的控制字符、具有特殊意义的字符用 % 接相应的十六进制

ASCII码代替。

U RL 解码-编码逆过程 Html表单变量与其相应值的分离 特殊字符替换

http://172.22.102.123/html/userRegistration_1.html

Page 19: Web server and_cgi

191919Copyright © 2009, Cameo Communications, Inc. All rights reserved.

CGI 预备知识-环境变量

Request-Specific 环境变量 CONTENT_TYPE -所传送来的信息的 MIME类型

• 一般是 application/x-www-form-urlencoded, 表示数据来自于 HTML表单。 REQUEST_METHOD -服务器与 CGI 程序之间的信息传输方式

• POST/ GET

CONTENT_LENGTH - 从 STDIN 中可以读到的有效数据的字节数• POST 传输方式

QUERY_STRING - 传送的信息• GET 传输方式

REMOTE_ADDR - 发送请求的客户机的 IP 地址 REMOTE_HOST -发送请求的客户机的主机名 …

Page 20: Web server and_cgi

202020Copyright © 2009, Cameo Communications, Inc. All rights reserved.

CGI 预备知识-环境变量

Server-Specific 环境变量 SERVER_NAME -服务器的主机名或 IP 地址 SERVER_SOFTWARE -回应客户端请求的服务器的软体名称和版本 SERVER_PROTOCOL -用于发送请求的协议的名称和版本号 SERVER_PORT -服务器接受请求时所使用的端口号 …

Client-Specific 环境变量 HTTP_ACCEPT - 说明了浏览器本次请求所能接收的数据类型 HTTP_REFERER - 存储浏览器当前页面所请求上一个页面的 URL

HTTP_USER_AGENT - 存储浏览器软件的类型和版本号 …

Page 21: Web server and_cgi

212121Copyright © 2009, Cameo Communications, Inc. All rights reserved.

CGI 编程

CGI 程式结构 初始化

• 环境变量的获取与判断• 接受所要处理的有关数据

处理• 输入处理 - URL 解码• 输出处理- 格式化输出

– 任意输出前均必须有一个用于定义MIME类型的输出类型( Content-type )行, MIME类型格式为类型 /子类型( type/subtype ),如 Content-type=text/html, 服务器告诉客户机如何处理该文件,缺省值为 text/plain ;

– 随后还必须跟一个空行; 终止

• 如果程式对某些文件进行了上锁操作,必须解锁;• 如果程式申请了某些对象如信号量,必须释放它们;• 释放内存。

Page 22: Web server and_cgi

222222Copyright © 2009, Cameo Communications, Inc. All rights reserved.

CGI 编程

CGI(C) 程式示例 userRegistration_1.html - userRegistration_1.c

• http://172.22.102.123/html/userRegistration_1.html

userRegistration_2.html - userRegistration_2.c

• http://172.22.102.123/html/userRegistration_2.html

userRegistration_3.html - userRegistration_3.c (cgihtml库)

• http://172.22.102.123/html/userRegistration_3.html

CGI(Perl) 程式示例 investigation(Perl).html - investigation.pl

• http://172.22.102.123/html/investigation(Perl).html

Page 23: Web server and_cgi

232323Copyright © 2009, Cameo Communications, Inc. All rights reserved.

CGI 安全问题 Web 服务器的安全

Web 服务器软件编制中的 BUG 、服务器配置错误 可能导致: CGI 源代码泄露、 物理路径信息泄露 、系统敏感信息泄露

、 远程执行任意指令 … CGI 语言的安全

输入验证错误 • 没有过滤“ ../”经常造成泄露系统文件 • 没有过滤“ ;”经常导致执行任意系统指令• 没有过滤“ |”或“ \t”经常导致文本文件攻击• 没有过滤“’”和“ #”经常导致 SQL数据库攻击

使用错误 • Perl 中的“ die”函数,如果没有在错误信息后面加上“ \n” 的话就极

可能 导致物理路径泄露 ;

Page 24: Web server and_cgi

242424Copyright © 2009, Cameo Communications, Inc. All rights reserved.

总 结

思考问题 简述WebServer 的主要功能; 当前主流Web 服务器软件有哪些? CGI 标准接口主要解决哪些问题? Web 服务器如何充当客户端和 CGI 程式间的中介? CGI 程式常常用到哪些环境变量,并简述其含义?

可选题 配置自己的主机为 Web 服务器,在主目录下创建一个 MyfirstWeb

文档,设置其为默认网页。 选择自己熟悉的语言编写 CGI 程式,功能:将用户表单输入的信

息以追加形式存入文件。

Page 25: Web server and_cgi

252525Copyright © 2009, Cameo Communications, Inc. All rights reserved.

总 结

主要参考书籍 CGI 编程指南 CGI 技术全面接触 CGI 程序设计指南

进一步学习资料 PerlChina

Perl 语言入门 ( 第四版 )

BOA(CGI,ASP,PHP,JAVA)

Page 26: Web server and_cgi

262626Copyright © 2009, Cameo Communications, Inc. All rights reserved.

Question, Suggestion & Discussion

Thanks!