用Delphi编写CGI程序(五)

原创 2001年07月30日 19:34:00
用Delphi编写CGI程序(五)
  CGI 程 序 的 功 能 是 强 大 的, 但 正 是 因 为 如 此 , 如 果 您 作 为 CGI 开 发 人 员 或 系 统 管 理 人 员 不 注 意 编 写 和 设 置 CGI 程 序 的 话,将 使 您 的 系 统 千 疮 百 孔。 本 篇 就 CGI的 安 全 性 问 题 做 一 讨 论。

3 、 CGI 的 安 全 性

   CGI 程 序 的 功 能 是 强 大 的 , 它 不 仅 可 以 具 有 普 通 程 序 的 功 能 , 而 且 可 以 将 程 序 的 结 果 发 布 在 WEB 上 。 但 正 是 因 为 CGI 程 序 的 功 能 如 此 强 大 , 如 果 您 作 为 CGI 开 发 人 员 或 系 统 管 理 人 员 不 注 意 编 写 和 设 置 CGI 程 序 的 话 , 将 使 您 的 系 统 千 疮 百 孔 , 让 一 些 非 法 用 户 有 机 可 乘 。

   这 里 所 讲 到 的 安 全 性 并 不 是 CGI 规 范 引 起 的 , 而 是 编 程 和 系 统 设 置 不 当 引 起 的 。 CGI 规 范 使 用 户 可 以 利 用 服 务 器 的 计 算 能 力 , 是 在 服 务 器 上 的 计 算 不 当 导 致 了 系 统 的 安 全 漏 洞 。 下 面 我 给 出 一 个 在 UNIX 系 统 上 的 一 个 CGI 安 全 漏 洞 , 这 个 漏 洞 是 非 常 常 见 的 。
# !/usr/local/bin/perl
# formmail.cgi

require "cgi.pl";

# Launch e-mail application "/bin/mail" with Subject: header from the "formname" field
open (MAIL, "|/bin/mail -s '".$input{"formname"}."' webweave");

# Add send "formcontents" field as the body of the message
print MAIL $input{"formcontents"};
close(MAIL);
exit(0);


   在 这 个 例 子 中 , CGI 程 序 将 表 单 的 信 息 提 交 给 /bin/mail , 并 发 送 到 webveave 服 务 器 上 去 。 在 大 多 数 情 况 下 这 个 CGI 程 序 可 以 正 常 完 成 任 务 , 但 此 CGI 程 序 未 过 滤 用 户 在 WEB 表 单 中 输 入 的 信 息 , 因 此 留 下 了 安 全 隐 患 。 当 用 户 或 别 有 用 心 的 人 输 入 了 错 误 的 数 据 可 能 导 致 系 统 错 误 或 得 到 不 应 有 的 权 限 。

   例 如 用 户 在 WEB 表 单 的 "formname" 中 填 写 下 面 的 内 容 :

   "ls /etc/passwd 'cracker@illegal.org #'

   在 用 户 的 WEB 浏 览 器 中 就 会 显 示 出 /etc/passwd 的 内 容 , 若 此 UNIX 系 统 的 passwd 文 件 没 有 shadow , 用 户 就 可 以 利 用 此 内 容 , 使 用 crack jack 或 crack john 就 可 以 试 图 破 解 密 码 !

   前 面 已 经 提 到 , CGI 的 安 全 是 程 序 员 和 系 统 管 理 员 都 应 负 责 的 , 下 面 我 就 分 别 讲 一 讲 二 者 应 注 意 的 事 :

   系 统 管 理 员 的 工 作 :
   1 、 与 程 序 员 合 作 , 共 享 有 关 服 务 器 安 全 的 信 息 , 同 时 互 相 检 查 代 码 , 及 时 发 现 代 码 中 的 安 全 问 题 。
   2 、 使 用 好 的 服 务 器 软 件 , 经 常 去 服 务 器 软 件 的 WEB 站 点 了 解 最 新 的 信 息 。
   3 、 将 服 务 器 的 用 户 限 制 在 特 定 的 网 络 主 机 上 , 使 用 服 务 器 的 安 全 管 理 功 能 、 设 置 路 由 存 取 控 制 等 。
   4 、 对 CGI 功 能 进 行 限 制 , 部 分 高 级 服 务 仅 限 于 信 任 的 用 户 , 将 测 试 中 的 CGI 程 序 的 使 用 限 制 在 开 发 人 员 中 , 只 提 供 给 用 户 经 过 测 试 的 CGI 程 序 。
   5 、 在 使 用 其 他 人 的 CGI 程 序 时 , 仔 细 检 查 代 码 。
   6 、 将 CGI 程 序 的 使 用 限 制 在 受 保 护 的 环 境 中 , 服 务 器 设 置 成 非 特 权 用 户 访 问 , 并 为 CGI 程 序 专 门 设 立 一 个 运 行 帐 户 或 组 。
   7 、 将 运 行 CGI 程 序 的 服 务 器 设 置 在 防 火 墙 外 , 这 一 点 一 定 要 注 意 , CGI 程 序 的 服 务 器 必 须 设 置 在 防 火 墙 外 , 如 果 设 置 在 防 火 墙 内 , 一 旦 非 法 用 户 找 到 了 CGI 程 序 服 务 器 的 安 全 漏 洞 , 他 就 可 以 控 制 在 防 火 墙 内 的 所 有 主 机 !
   8 、 降 低 CGI 程 序 的 运 行 优 先 级 , 防 治 用 户 恶 意 运 行 大 量 的 CGI 程 序 导 致 服 务 器 过 载 。
   9 、 订 阅 有 关 网 络 安 全 性 的 邮 件 , 参 加 网 络 安 全 性 的 新 闻 组 。

   CGI 程 序 员 的 工 作 :
   1 、 同 系 统 管 理 员 合 作 , 了 解 系 统 的 安 全 信 息 , 相 互 检 查 代 码 。
   2 、 使 用 可 靠 的 库 程 序 , 检 查 库 程 序 的 源 代 码 。
   3 、 从 REMOTE_HOST 中 得 到 客 户 机 名 , 将 一 些 高 级 功 能 限 制 在 受 信 任 的 客 户 机 。
   4 、 如 果 WEB 服 务 器 提 供 HTTP 口 令 确 认 , 使 用 HTTP 口 令 来 限 制 访 问 。
   5 、 过 滤 用 户 的 输 入 , 去 除 非 法 的 输 入 数 据 。
   6 、 限 制 输 入 数 据 的 大 小 , 防 止 恶 意 用 户 输 入 大 量 数 据 使 服 务 器 过 载 。
   7 、 避 免 传 递 用 户 数 据 到 其 他 应 用 程 序 , 以 免 用 户 调 用 命 令 解 释 器 或 利 用 其 他 应 用 程 序 的 安 全 漏 洞 。
   8 、 发 现 了 CGI 程 序 的 漏 洞 时 , 不 要 对 任 何 人 讲 , 更 不 要 在 程 序 中 注 释 说 明 , 您 应 该 作 的 就 是 立 刻 修 补 漏 洞 。
   9 、 学 作 攻 击 者 , 找 出 CGI 程 序 的 安 全 漏 洞 。


用Delphi编写CGI程序(三)

用Delphi编写CGI程序(三)   也 许 各 位 读 者 感 到 CGI 程 序 有 一 种 神 秘 感, 在 这 一 部 分 将 讲 述 一 些 关 于 CGI 程 序 的 基 本 编 程 过...
  • zou5655
  • zou5655
  • 2001年07月30日 19:31
  • 632

用Delphi编写CGI程序(二)

用Delphi编写CGI程序(二)   在 上 一 讲 中, 我 们 介 绍 了 CGI 程 序 的 功 能。 今 天, 我 们 进 入: 第 二 部 分、 CGI 程 序 设 计 的 概 念 。本 ...
  • zou5655
  • zou5655
  • 2001年07月30日 19:30
  • 807

用Delphi编写CGI程序(一)

用Delphi编写CGI程序(一)   1.0 、 CGI 程 序 的 功 能:     首 先, 什 么 是 公 共 网 关 接 口( CGI ) 呢? CGI 是 一 个 用 于 定 义 WEB ...
  • zou5655
  • zou5655
  • 2001年07月30日 19:29
  • 750

用Delphi编写CGI程序(四)

用Delphi编写CGI程序(四) 从 这 一 讲 开 始,我 们 将 进 入 CGI 程 序 设 计 的 学 习 过 程。通 过 前 面 几 讲 的 学 习,您 已 经 掌 握 了 CGI 程 序 ...
  • zou5655
  • zou5655
  • 2001年07月30日 19:33
  • 592

用Delphi编写CGI程序(六)

用Delphi编写CGI程序(六)    在 前 面 的 几 个 章 节 里 , 我 们 完 成 了 CGI 程 序 的 一 般 论 述 。 在 此 , 我 给 出 一 个 简 单 的 示 范 程 序...
  • zou5655
  • zou5655
  • 2001年07月30日 19:35
  • 648

用c编写cgi程序

CGI的工作原理介绍:CGI(Common Gateway Interface)是一个WEB服务器提供信息服务的标准接口,通过这样一个接口,WEB服务器能够执行程序,并将程序输出的信息返回给浏览器。因...
  • yacsha
  • yacsha
  • 2007年01月27日 20:47
  • 1574

用Delphi编写CGI程序返回图象

珠海西门子表计公司  汪永荣  ---- Delphi 4.0对Internet编程提供了强大的支持,Delphi 4.0编写CGI非常容易, Delphi 4.0本身提供了例程。但是笔者在实践中...
  • bq_cui
  • bq_cui
  • 2013年04月02日 10:54
  • 904

CGI程序编写

下载回源码包以后,就3个文件: cgic.c      函数库 capture.c   一个很简单的CGI例子,仅仅输出两行提示文字 cgictest.c  一个演示读取form表单数据的CGI例子 ...
  • manchestermi
  • manchestermi
  • 2016年03月09日 17:04
  • 2479

用VB编写标准CGI程序

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 05:12
  • 335

CGI程序学习

学习CGI脚本 (脚本) CGI 意思为 Common Gateway Interface, 一种基于浏览器的输入、在Web服务器上运行的程序方法. CGI脚本 使你的浏览器与用户能交互,为了在...
  • zhoubl668
  • zhoubl668
  • 2012年03月13日 11:30
  • 8553
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Delphi编写CGI程序(五)
举报原因:
原因补充:

(最多只允许输入30个字)