随笔分类 -  PHP

上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 18 下一页
网站语言
摘要:从一道面试题开始在开始本节内容前,我们先来看看一道还算比较常见的PHP面试题:1$arr=array('1','2','3');23foreach($arras&$v){4}56foreach($arras$v){7}89var_dump($arr);猜一下,运行的结果会是什么呢?熟悉PHP的同学可能已经知道结果了:1array20 => string'1'(length=1)31 => string'2'(length=1)42 => &string'2'(len 阅读全文
posted @ 2013-08-01 15:34 幻星宇 阅读(453) 评论(0) 推荐(0)
摘要:$val) { if (isset($array_2[$val])) { unset($array_1[$key]); } } return $array_1;}function runtime($mode = 0) { static $t; if (!$mode) { $t = microtime(); return; } $t1 = microtime(); list($m0, $s0) = explode(" ", $t); list($m1, $s1) = explode(" ", $t1); return sprintf("%.3f& 阅读全文
posted @ 2013-08-01 15:19 幻星宇 阅读(690) 评论(0) 推荐(0)
摘要:$data) { $refer[$data[$pk]] = &$list[$key]; } foreach ($list as $key => $data) { //判断是否存在parent $parantId = $data[$pid]; if ($root == $parantId) { $tree[] = &$list[$key]; } else { if (isset($refer[$parantId])) { $parent = &$refer[$parantId]; $parent[$child][] = &$list[$k... 阅读全文
posted @ 2013-08-01 11:34 幻星宇 阅读(2369) 评论(0) 推荐(0)
摘要:$item ) { if ($item [$pid]) { if (! isset ( $t [$item [$pid]] ['parent'] [$item [$pid]] )) $t [$item [$id]] ['parent'] [$item [$pid]] = & $t [$item [$pid]]; } } return $t;}/** * * 创建子节点树形数组 * 参数 * $ar 数组,邻接列表方式组织的数据 * $id 数组中作为主键的下标或关联键名 * $pid * 数组中作为父键的下标或关联键名 * 返回 多维数组 * */fun 阅读全文
posted @ 2013-08-01 10:06 幻星宇 阅读(399) 评论(0) 推荐(0)
摘要:array('id'=>1,'pid'=>0,'name'=>'News_1'),2=>array('id'=>2,'pid'=>1,'name'=>'News_12'),7=>array('id'=>7,'pid'=>1,'name'=>'News_17'),3=>array('id'=>3,'pid& 阅读全文
posted @ 2013-08-01 09:55 幻星宇 阅读(384) 评论(0) 推荐(0)
摘要:// @param array $list 查询结果//@param string $field 排序的字段名//@param array $sortby 排序类型//asc正向排序 desc逆向排序 nat自然排序function list_sort_by($list,$field, $sortby='asc') {if(is_array($list)){$refer = $resultSet = array();foreach ($list as $i => $data){$refer[$i] = &$data[$field];switch ($sortby) 阅读全文
posted @ 2013-08-01 09:48 幻星宇 阅读(242) 评论(0) 推荐(0)
摘要:==过滤输入/输出转义过滤是Web应用安全的基础。它是你验证数据合法性的过程。通过在输入时确认对所有的数据进行过滤,你可以避免被污染(未过滤)数据在你的程序中被误信及误用。大多数流行的PHP应用的漏洞最终都是因为没有对输入进行恰当过滤造成的。有很多种方法过滤数据,其中有一些安全性较高。最好的方法是把过滤看成是一个检查的过程。请不要试图好心地去纠正非法数据,要让你的用户按你的规则去做,历史证明了试图纠正非法数据往往会导致安全漏洞。另外一个Web应用安全的基础是对输出进行转义或对特殊字符进行编码,以保证原意不变。例如,O’Reilly在传送给MySQL数据库前需要转义成O\’Reilly。单引号前 阅读全文
posted @ 2013-07-31 14:34 幻星宇 阅读(221) 评论(0) 推荐(0)
摘要:" /> 阅读全文
posted @ 2013-07-31 14:24 幻星宇 阅读(337) 评论(0) 推荐(0)
摘要:使用系统命令是一项危险的操作,尤其在你试图使用远程数据来构造要执行的命令时更是如此。如果使用了被污染数据,命令注入漏洞就产生了。exec()是用于执行shell命令的函数。它返回执行并返回命令输出的最后一行,但你可以指定一个数组作为第二个参数,这样输出的每一行都会作为一个元素存入数组。使用方式如下:1假设ls命令在shell中手工运行时会产生如下输出:1$ ls2total 03-rw-rw-r-- 1 chris chris 0 May 21 12:34 php-security4-rw-rw-r-- 1 chris chris 0 May 21 12:34 chris-shiflett当通 阅读全文
posted @ 2013-07-29 16:53 幻星宇 阅读(428) 评论(0) 推荐(0)
摘要:关于包含的一个重要问题是源代码的暴露。产生这个问题主要原因是下面的常见情况:对包含文件使用.inc的扩展名包含文件保存在网站主目录下Apache未设定.inc文件的类型Apache的默认文件类型是text/plain上面情况造成了可以通过URL直接访问包含文件。更糟的是,它们会被作为普通文本处理而不会被PHP所解析,这样你的源代码就会显示在用户的浏览器上。避免这种情况很容易。只能重组你的应用,把所有的包含文件放在网站主目录之外就可以了,最好的方法是只把需要公开发布的文件放置在网站主目录下。虽然这听起来有些疯狂,很多情形下能导致源码的暴露。我曾经看到过Apache的配置文件被误写(并且在下次启动 阅读全文
posted @ 2013-07-29 16:51 幻星宇 阅读(402) 评论(0) 推荐(0)
摘要:一个比欺骗表单更高级和复杂的攻击方式是HTTP请求欺骗。这给了攻击者完全的控制权与灵活性,它进一步证明了不能盲目信任用户提交的任何数据。为了演示这是如何进行的,请看下面位于http://example.org/form.php的表单:12Please select a color:389如果用户选择了Red并点击了Select按钮后,浏览器会发出下面的HTTP请求:1POST /process.php HTTP/1.12Host: example.org3User-Agent: Mozilla/5.0 (X11; U; Linux i686)4Referer: http://example.o 阅读全文
posted @ 2013-07-29 16:49 幻星宇 阅读(395) 评论(0) 推荐(0)
摘要:跨站请求伪造(CSRF)是一种允许攻击者通过受害者发送任意HTTP请求的一类攻击方法。此处所指的受害者是一个不知情的同谋,所有的伪造请求都由他发起,而不是攻击者。这样,很你就很难确定哪些请求是属于跨站请求伪造攻击。事实上,如果没有对跨站请求伪造攻击进行特意防范的话,你的应用很有可能是有漏洞的。请看下面一个简单的应用,它允许用户购买钢笔或铅笔。界面上包含下面的表单:010203Item:0408Quantity: 091011一个攻击者会首先使用你的应用以收集一些基本信息。例如,攻击者首先访问表单并发现两个表单元素item及quantity,他也同时知道了item的值会是铅笔或是钢笔。下面的bu 阅读全文
posted @ 2013-07-29 16:48 幻星宇 阅读(497) 评论(0) 推荐(0)
摘要:Ctype函数是PHP内置的字符串体测函数。主要有以下几种ctype_alnum-- Check for alphanumeric character(s)检测是否是只包含[A-Za-z0-9]ctype_alpha-- Check for alphabetic character(s)检测是否是只包含[A-Za-z]ctype_cntrl-- Check for control character(s)检查是否是只包含类是“\n\r\t”之类的字 符控制字符ctype_digit-- Check for numeric character(s)检查时候是只包含数字字符的字符串(0-9)cty 阅读全文
posted @ 2013-07-29 16:42 幻星宇 阅读(236) 评论(0) 推荐(0)
摘要:深度防范深度防范原则是安全专业人员人人皆知的原则,它说明了冗余安全措施的价值,这是被历史所证明的。深度防范原则可以延伸到其它领域,不仅仅是局限于编程领域。使用过备份伞的跳伞队员可以证明有冗余安全措施是多么的有价值,尽管大家永远不希望主伞失效。一个冗余的安全措施可以在主安全措施失效的潜在的起到重大作用。回到编程领域,坚持深度防范原则要求您时刻有一个备份方案。如果一个安全措施失效了,必须有另外一个提供一些保护。例如,在用户进行重要操作前进行重新用户认证就是一个很好的习惯,尽管你的用户认证逻辑里面没有已知缺陷。如果一个未认证用户通过某种方法伪装成另一个用户,提示录入密码可以潜在地避免未认证(未验证) 阅读全文
posted @ 2013-07-29 16:39 幻星宇 阅读(310) 评论(0) 推荐(0)
摘要:没有不会犯错的开发者,PHP的错误报告功能可以协助你确认和定位这些错误,可以提供的这些错误的详细描述,但如果被恶意攻击者看到,这就不妙了。不能让大众看到报错信息,这一点很重要。做到这一点很容易,只要关闭display_errors,当然如果您希望得到出错信息,可以打开log_errors选项,并在error_log选项中设置出错日志文件的保存路径。由于出错报告的级别设定可以导致有些错误无法发现,您至少需要把error_reporting设为E_ALL。E_ALL | E_STRICT 是最高的设置,提供向下兼容的建议,如不建议使用的提示。所有的出错报告级别可以在任意级别进行修改,所以您如果使用 阅读全文
posted @ 2013-07-29 16:36 幻星宇 阅读(187) 评论(0) 推荐(0)
摘要:除了能在共享服务器上读取任意文件之外,攻击者还能建立一个可以浏览文件系统的脚本。由于你的大多数敏感文件不会保存在网站主目录下,此类脚本一般用于找到你的源文件的所在位置。请看下例:01read())26{27$size=filesize("$dir$filename");2829if(is_dir("$dir$filename"))30{31$type='dir';32$filename.='/';33}34else35{36$type='file';37}3839if(is_readable("$ 阅读全文
posted @ 2013-07-29 16:34 幻星宇 阅读(364) 评论(0) 推荐(0)
摘要:绝不要信任外部数据或输入关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据。外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据。在采取措施确保安全之前,来自任何其他来源(比如 GET 变量、表单 POST、数据库、配置文件、会话变量或 cookie)的任何数据都是不可信任的。例如,下面的数据元素可以被认为是安全的,因为它们是在 PHP 中设置的。1但是,下面的数据元素都是有瑕疵的。1为什么第一个变量 $myUsername 是有瑕疵的?因为它直接来自表单 POST。用户可以在这个输入域中输入任何字符串,包括用来清除文件或运行以前上传的 阅读全文
posted @ 2013-07-29 16:28 幻星宇 阅读(230) 评论(0) 推荐(0)
摘要:跨站脚本攻击是众所周知的攻击方式之一。所有平台上的Web应用都深受其扰,PHP应用也不例外。所有有输入的应用都面临着风险。Webmail,论坛,留言本,甚至是Blog。事实上,大多数Web应用提供输入是出于更吸引人气的目的,但同时这也会把自己置于危险之中。如果输入没有正确地进行过滤和转义,跨站脚本漏洞就产生了。以一个允许在每个页面上录入评论的应用为例,它使用了下面的表单帮助用户进行提交:12Name: 3Comment: 45程序向其他访问该页面的用户显示评论。例如,类似下面的代码段可能被用来输出一个评论($comment)及与之对应的发表人($name):1$name writes:&quo 阅读全文
posted @ 2013-07-29 16:24 幻星宇 阅读(362) 评论(0) 推荐(0)
摘要:SPL提供了6个迭代器接口:Traversable遍历接口(检测一个类是否可以使用foreach进行遍历的接口)Iterator迭代器接口(可在内部迭代自己的外部迭代器或类的接口)IteratorAggregate聚合式迭代器接口(创建外部迭代器的接口)OuterIterator迭代器嵌套接口(将一个或多个迭代器包裹在另一个迭代器中)RecursiveIterator递归迭代访问接口(提供递归访问功能)SeekableIterator可索引迭代访问接口(实现查找功能)下面对各种迭代器接口简单介绍一下:1. TraversableTraversable接口实际上不是一个接口,在实际写php代码中 阅读全文
posted @ 2013-07-29 16:22 幻星宇 阅读(256) 评论(0) 推荐(0)
摘要:斐波纳契数列通常做法是用递归实现,当然还有其它的方法。这里现学现卖,用PHP的迭代器来实现一个斐波纳契数列,几乎没有什么难度,只是把类里的next()方法重写了一次。注释已经写到代码中,也是相当好理解的。/*** @author 简明现代魔法 http://www.nowamagic.net*/class Fibonacci implements Iterator { private $previous = 1; private $current = 0; private $key = 0; public function current() { ... 阅读全文
posted @ 2013-07-29 16:20 幻星宇 阅读(231) 评论(0) 推荐(0)

上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 18 下一页