5.0 - 安全
--------------------------------------------------------------------------------
Q5.1: 以 Perl 寫成的 CGI 程式是不是不如以 shell 或 C 寫的來得安全?
這個問題的答案是: CGI 程式先天上就不安全,不管它是用那個語言寫成的*。
【譯者】WWW 及
CGI 操作安全 FAQ 中問題第 31 對此有深入的探討。
--------------------------------------------------------------------------------
Q5.2:我該特別留意哪些安全事項?
絕對不要對 shell 暴露任何 form 資料。底下這幾項通通都是安全漏洞:
open(COMMAND, "/usr/ucb/finger $form_user");
system("/usr/ucb/finger $form_user");
@data = `usr/ucb/finger $form_user`;
話雖如此,在上面的第二種寫法中,系統安全可藉著改變參數傳送的方式而得以改 善。也就是將參數由字串方式傳送 (shell 會先解譯),改為序列方式傳送。
system("/usr/ucb/finger", $form_user);
您同時應該閱讀:
由 Lincoln Stein 所著,一份很完整的 WWW 及 CGI 操作安全 FAQ
Paul Phillips 所著,CGI 安全 FAQ
--------------------------------------------------------------------------------
Q5.3:為什麼大家都說
http://bigidiot.abuse-me.com/perl.exe?foo.pl 這樣很危險?會有多糟?
極度危險! 想想看如果我這麼做會發生什麼事:
http://bigidiot.abuse-me.com/cgi-bin/perl.exe?-e+'format:%20c'
現在您同意了吧?避免這個惡夢發生的方法:
將 perl.exe 執行檔由 ``cgi-bin'' 移到 server 根目錄以外的目錄裡去。
在 ``cgi-bin'' 裡用批次檔 (batch) script 來叫出您的 CGI script。
以下是一例。假設您的 CGI script 叫做 ``sample.pl'' 而您的批次檔叫 ``simple.bat'':
@echo off
c:\dos_perl\perl.exe c:\netscape\ns-home\docs\cgi-bin\simple.pl
現在,您可以做:
Click Here
--------------------------------------------------------------------------------
Q5.4:要如何在程式中安全地使用逆向撇號 (backticks,"`",位於鍵盤左上角)?這麼做:
@ans = `grep'$user_field' some.file`;
是不是真的不安全?
是的! 這非常危險!試想,如果 $user_field 含有這樣的內容會有什麼後 果:
; rm -fr / ;
要達到相同的效果,一個比較安全的做法是*:
if (open GREP, "-|") {
@ans = ;
} else {
exec("/usr/local/bin/grep", $user_field, "some.file")
|| die "Error exec'ing command", "\n";
}
close GREP;
【譯者】 如果讀者對以上 open GREP, "-|"部份的句法有疑問,可以
參閱 perlipc manpages 中 Safe Pipe Opens一節的說明。
--------------------------------------------------------------------------------
Q5.5: /$user_variable/ 這個句法是不是 Perl 5 中的一個安全漏洞?
不!這不是個安全漏洞。但是如果您用 eval 指令在執行期 (runtime) 去 評估這個敘述,那麼,它會變成一個安全死角。例如這種做法可能很危險:
foreach $regexp (@all_regexps) {
eval "foreach (\@data) { push(\@matches, \$_) if m|$regexp|o; }";
}
--------------------------------------------------------------------------------
版權事宜
--------------------------------------------------------------------------------
This document, and all its parts, are Copyright (c) 1996, Shishir
Gundavaram and Tom Christiansen. All rights reservered.
Permisson to distribute this collection, in part or full, via electronic
means (emailed, posted or archived) or printed copy are granted providing
that no charges are involved, reasonable attempt is made to use the most
current version, and all credits and copyright notices are retained.
Requests for other distribution rights, including incorporation in
commercial products, such as books, magazine articles, or CD-ROMs should be
made to either of the authors.
本文件著作權屬於 Shishir Gundavaram 及 Tom Christiansen 所有,Copyright (C) 1996。在不涉及收費營利、盡可能地使用最新版,及所有著作權告示保持完整 的情況下,作者允許任何人透過電子形式(電子郵件、討論群布告,或存放),或 印表方式對本文件作完整或部份發行。如欲將本文件作其他方式發行,包括將本文 件附加於商業產品,諸如書籍、雜志文章,或光碟等之中,必須事先對二位作者其 中一人提出請求,以徵得許可授權。
本中譯版及譯者補充部份著作權屬蕭百齡及兩只老虎工作室所有,Copyright (C) 1997。本中譯版遵守並使用與上述原文版相同的使用條款發行。
(http://www.fanqiang.com)
進入【UNIX論壇】
|