[Zend权威认证试题讲解]第十一章 - 编写安全的PHP程序
PHP太强大、太容易了,因此开发者常常忘记Web安全相关的问题。抛开重要性不看,安全问题往往是网站中最容易被人忽视的一个部分。不幸的是,有很多种方法可以从内部或外部危害系统的安全,你必须不断的找出并修补这些潜在的危险因素。
在进行安全检测时,有很多需要强调的问题——不止是与安全直接相关的,还包括许多其他的内容。 K3M4q/~2l/YP
要编写安全的程序,首先必须掌握一些基础技术,这样你才能应付本章的题目。1n9X;KFKk!c+q-ct
^ru~%|eZi
问题
o} K8DK*]%r6{
1.以下哪种方法能防止你的PHP程序遭受外部入侵?
A.使用复杂的加密算法
B.保护数据库密码@-\?p1arIb
C.如果有可能的话,使用SSL-AH\t9[L"cr9\
D.验证输入-b!?6?7OU2k(ea+`
E.只使用来源可信的输入
2.假设$action和$data变量用来接受用户输入,并且register_globals是打开的。以下代码是否安全?[code] 8I*hqFqu$dw
<?php
if(isUserAdmin()) { $isAdmin = true; }
$data = validate_and_return_input($data);9R ^`5`f@S*` @
switch($action)
{8O,Q*I3p+i|_O
case 'add':
addSomething($data);?n/g/u/{$m
break;/vYu;cQ^6N
case 'delete':
if($isAdmin) {
deleteSomething($data);q*chUs:pF|)C3Aj
}OcJ!@5Nu
break;
case 'edit':
if($isAdmin) {6gM:r)S"Jyo F
editSomething($data);ijX)xY
}
break;KuBW]m5k
default:
print "Bad Action.";
}~%ym kq/K
?>
[/code]A.安全。在执行受保护的操作前先检查$isAdmin是否为true)x0yJNPkS
B.不安全。没有确认$action是不是合法输入
C.不安全。$isAdmin可以通过register_globals被篡改
D.安全。因为它验证了用户数据$data~X U5J3cJ
E.A和BG8f T*w Y s Js;e L0H%D
3.要防止跨站攻击,以下哪些是需要做的?(三选)N%uB2_C
A.永远不要使用include和require引入靠用户输入决定路径的文件(比如:include”$username/script.txt”;) h#`b.q ay
B.除非网站需要,否则关闭allow_url_fopenQz,IIZzT~S
C.避免使用如curl这类用来打开远程连接的扩展库!X,? Y.@Wa4Ng
D.使用类似strip_tags()一类的函数过滤一个用户输入给另一个用户看的内容
E.以上都对i6l+e#YT`,NK5z
B,B'_*s-b o\ L3P
4.如果register_globals必须要被打开,如何才能防止恶意用户危害系统安全?(双选)