[Zend权威认证试题讲解]第十一章 - 编写安全的PHP程序
PHP太强大、太容易了,因此开发者常常忘记Web安全相关的问题。)N3OfyvP抛开重要性不看,安全问题往往是网站中最容易被人忽视的一个部分。不幸的是,有很多种方法可以从内部或外部危害系统的安全,你必须不断的找出并修补这些潜在的危险因素。.Jq%~-Jv$u
在进行安全检测时,有很多需要强调的问题——不止是与安全直接相关的,还包括许多其他的内容。B1Z6Ou|V
要编写安全的程序,首先必须掌握一些基础技术,这样你才能应付本章的题目。5V$H8jl,G(_1ey8la
"q.c0H7n:k/_.`
问题
wm6mZ:O1k^
1.以下哪种方法能防止你的PHP程序遭受外部入侵?
&LEop0~Z`
A.使用复杂的加密算法
B.保护数据库密码L_6Z+P4T.j0G&Ui9| C
C.如果有可能的话,使用SSL
D.验证输入
E.只使用来源可信的输入
{MEB&uj cy:Z$a
Jr2KwVf&]!?j
2.假设$action和$data变量用来接受用户输入,并且register_globals是打开的。以下代码是否安全?[code]
<?php
if(isUserAdmin()) { $isAdmin = true; }
$data = validate_and_return_input($data);
switch($action)2E Fl}.{r
{\K.t*@t?"K)z1~V
case 'add':
addSomething($data);
break;|2K"]rioswe
case 'delete':0vm4Xh5N'q9f
if($isAdmin) {
deleteSomething($data);
}{R5{NM5V'zhpW r
break;6s1In)I OX T6p8b"z
case 'edit':;f jO_ pWD~s
if($isAdmin) {@V&kt#s f4g8Q
editSomething($data);V-N6Ac`}a
}P L}8T5|\
break;
default:0}'Y\/t$Ab,a$r
print "Bad Action.";
}*V'O5p5HH]4H"{"l
?>
[/code]A.安全。在执行受保护的操作前先检查$isAdmin是否为true
B.不安全。没有确认$action是不是合法输入N;R#f:Fj r%[q
C.不安全。$isAdmin可以通过register_globals被篡改pD&Uaa4~1ExX"`r2b
D.安全。因为它验证了用户数据$data
E.A和BR1K:wwtQ};u
#uZ w1k1Fx
4T9Mz9I1^i:Ly
3.要防止跨站攻击,以下哪些是需要做的?(三选)
2g9d~3A1rZ/ah'h
A.永远不要使用include和require引入靠用户输入决定路径的文件(比如:include”$username/script.txt”;)8P0U3T ac6U
B.除非网站需要,否则关闭allow_url_fopenX9fN/HGhke
C.避免使用如curl这类用来打开远程连接的扩展库
D.使用类似strip_tags()一类的函数过滤一个用户输入给另一个用户看的内容z3\gyQ
E.以上都对
Q:Tr\h:?6G$F"s!c+hUz
4.如果register_globals必须要被打开,如何才能防止恶意用户危害系统安全?(双选)x0V9Og;KWw
T+@kq;VF
A.过滤所有来自非信任源的数据7]IiH8X)IT5f
B.过滤所有外部数据
C.所有变量在使用前先初始化
D.使用难猜变量名来防止用户篡改数据
E.以上都对%p:S'Z5s(F!V
5.SQL查询常常基于用户输入的数据来构建。以下哪种方法能避免安全隐患?
A.在数据服务器和web服务器之间放置防火墙.DHt;HGO
B.转义用户数据,使其中无法包含DBMS能执行的SQL命令|,o9MD G9h@
C.使用存储例程
D.使用面向对象编程,把每个查询定义为单独的类
yBnWlk W$s
q{h{/J'YiDK
6.某些时候需要在PHP脚本中使用第三方功能,来实现一些PHP不能完成的任务(比如调用压缩软件压缩某种PHP不支持其格式的文件)。在PHP脚本中执行系统命令时,以下哪些选项能确保没有命令注入?(双选)
;ql@.mY.G
A.总是给要在exec()中执行的命令加`
B.总是使用shell_exec函数,它能够在执行前对命令进行安全检查
C.使用escapeshellcmd函数转义命令中的特殊字符
D.在执行命令前,先用ini_set()打开safe_mode,
E.用escapeshellarg函数在执行前转义命令参数
6{zA+]3i7l Dv
7.处理HTTP文件上传时,PHP把文件储存在$_FILES中。在PHP脚本的执行周期中,这些文件将放在本地的临时文件夹里,而在脚本结束后,文件将被自动删除。在处理HTTP文件上传时,如果确保当前操作的文件是正确的文件?(双选)|FxJ!rKJ2YH(T
6SNDbj'@
A.操作前,将文件名与浏览器报告的文件名对比.@9X(^j%}(kh
B.操作前,用file_exists函数确保文件存在
C.用is_uploaded_file函数确认你的文件的确是通过HTTP方式传输过来的
D.用move_upload_file()将文件移动到安全位置3U9z2E?~)l.X!E ]
E.只信任PHP存储临时文件的目录下的文件
[;xI"]2]t9r t?/p
8.在PHP的“安全模式”下,以下哪些设置有助于降低安全风险?(三选)q3C:^)^"_1z
"FBb9Jr vF*k"F
A.限制shell命令的执行Y#jr7vy epb
B.限制对系统环境变量的访问v|y^J;V
C.限制PHP的文件包含目录VkY$D|q[
D.限制允许对数据库进行的操作
E.以上全部VOEG y3M GH
9.要限制脚本只能访问一个指定的文件夹中的文件,以下那种方法最简单?@3i5jH| c:M
A.打开safe_mode
B.用open_basedir指定允许的文件夹