[摘要]-------------- (图1) (译者注:原图是一个浏览器,我仅画出HTML页中的部分。) 我们来看一下下面的程序行会如何处理这样的输入: pri...
--------------
(图1)
(译者注:原图是一个浏览器,我仅画出HTML页中的部分。)
我们来看一下下面的程序行会如何处理这样的输入:
print `/usr/bin/finger $in`
由于你使用了向后的标记,首先它会执行一个shell。然后它将执行如下的
命令:
/usr/bin/finger nobody@nowhere.org ; /bin/rm -rf /
这将会怎样呢?假设在命令行像这样输入。它会删除所有的文件和目录,从
root的目录开始。我们需要sanitize这个输入来render the semicolon(;)
metacharacter harmless.在Perl中,利用表4中的函数可以很容易的实现。
(C中的这些等价函数在表5中;它们来自cgihtml的C库。)
程序4. Perl中的escape_input().
sub escape_input {
@_ =~ s/([;<>\*\
关键词:CGI的安全