[Zend权威认证试题讲解]第十一章 - 编写安全的PHP程序
PHP太强大、太容易了,因此开发者常常忘记Web安全相关的问题。0WY#Uv;l抛开重要性不看,安全问题往往是网站中最容易被人忽视的一个部分。不幸的是,有很多种方法可以从内部或外部危害系统的安全,你必须不断的找出并修补这些潜在的危险因素。
在进行安全检测时,有很多需要强调的问题——不止是与安全直接相关的,还包括许多其他的内容。
要编写安全的程序,首先必须掌握一些基础技术,这样你才能应付本章的题目。{1nw/E%g H
l(^A$w.dn
问题IX x3ij3vzp~
(zE-^MA6\X`M^
1.以下哪种方法能防止你的PHP程序遭受外部入侵?
A.使用复杂的加密算法x2S(e1I$UFyB
B.保护数据库密码
C.如果有可能的话,使用SSL*W D1M~dB
D.验证输入^g2y.TL#fM
E.只使用来源可信的输入
1Yz6bV5g
2.假设$action和$data变量用来接受用户输入,并且register_globals是打开的。以下代码是否安全?[code] 1{,y8VUh6?!eF
<?php6l zU{kS9sO
if(isUserAdmin()) { $isAdmin = true; }!N4S-l4ke1Q
$data = validate_and_return_input($data);
switch($action)
{s p1taY k
case 'add':
addSomething($data);
break;Z:f)I1_0WN0y3|;j)Q/C
case 'delete':
if($isAdmin) {Y^u1|6IGi:I ?
deleteSomething($data);y0IRt:U
}
break;(qzKY+T[ h[JF
case 'edit':(n9t#eKyc
if($isAdmin) { {A$BW'L^~q!~ iY
editSomething($data);
} rLa3U9F*X5AH
break;
default:O|-B4a(Im3H
print "Bad Action.";
}
?>
[/code]A.安全。在执行受保护的操作前先检查$isAdmin是否为true;p]a;nto
B.不安全。没有确认$action是不是合法输入5\2Ub exRH)vT+g
C.不安全。$isAdmin可以通过register_globals被篡改p"aCF*YvAG)du
D.安全。因为它验证了用户数据$data6|am$|d'I6[5v3N+G
E.A和B
3.要防止跨站攻击,以下哪些是需要做的?(三选)CG#_y'C{
A.永远不要使用include和require引入靠用户输入决定路径的文件(比如:include”$username/script.txt”;)
B.除非网站需要,否则关闭allow_url_fopeny:xYmAh"L
C.避免使用如curl这类用来打开远程连接的扩展库 k$xDd,aK
D.使用类似strip_tags()一类的函数过滤一个用户输入给另一个用户看的内容[eLrT {;f$L
E.以上都对qc Q[Y~{
pxxPVN$g7V8]
4.如果register_globals必须要被打开,如何才能防止恶意用户危害系统安全?(双选);Ws/QgW,N-D?l