在WEB开发中,安全常会被工程师所忽略,常抱有侥幸心理,认为这是小概率事件,但是不出事则已,一出事则非常严重,闲话少续,说说PHP中的几个跟安全相关的函数。
addslashes
行为:对SQL语句中的特殊字符进行转义操作,包括(‘), (“), (\), (NUL)四个字符,此函数在DBMS没有自己的转义函数时候使用,但是如果DBMS有自己的转义函数,那么推荐使用原装函数,比如MySQL有mysql_real_escape_string函数用来转义SQL。 Continue reading
在WEB开发中,安全常会被工程师所忽略,常抱有侥幸心理,认为这是小概率事件,但是不出事则已,一出事则非常严重,闲话少续,说说PHP中的几个跟安全相关的函数。
addslashes
行为:对SQL语句中的特殊字符进行转义操作,包括(‘), (“), (\), (NUL)四个字符,此函数在DBMS没有自己的转义函数时候使用,但是如果DBMS有自己的转义函数,那么推荐使用原装函数,比如MySQL有mysql_real_escape_string函数用来转义SQL。 Continue reading
Lambda函数的介绍很多,在PHP中我们可以利用其快速地定义只使用一次(throw-away)的函数,也就是匿名函数。
试想有一段代码需要调用preg_replace_callback()函数,一般的调用方式有以下几种:
1. 把callback函数定义在其他地方,但是这样会把应该在一起的代码分开了,这会降低代码的可读性。
2. 把callback函数定义在调用preg_replace_callback的地方。这种情况下必须得用function_exists来确保callback函数名没有被使用过,以下代码就是一个例子,代码的可读性很差。
function replace_spaces ($text) {
if (!function_exists ('replace_spaces_helper')) {
function replace_spaces_helper ($matches) {
return str_replace ($matches[1], ' ', ' ').' ';
}
}
return preg_replace_callback ('/( +) /', 'replace_spaces_helper', $text);
}
3. 使用create_function()在运行时创建函数。但是有几个缺点:首先,代码高亮实效;其次,由于函数是在运行时创建,所以opcode不能对创建的函数进行缓存。
Continue reading
有如下代码:
$opts = array(
'http' => array(
'method' => "GET",
'header' => "Accept-language: en\r\n" .
"Cookie: foo=bar\r\n" .
"User-Agent: MyAgent/1.0\r\n"
)
);
$context = stream_context_create($opts);
$result = file_get_contents('http://www.example.com/', false, $context);
var_dump($result);
PHP中的引用可以理解成变量的别名。由于PHP的变量名是存储在符号表(symbol table)中的,变量内容是存储在堆中,引用就是用符号表中的不同符号(symbol)名称来访问同一存储内容,和Unix文件系统中的hardlink是同一个概念,比如:
<?php $a = 1; $b = &$a; //$a与$b指向同一内容 $b = 2; echo $b; //2 echo $a; //2
对于普通变量来说,简单的赋值就是克隆,比如:
<?php $a = 1; $b = $a; //$a 和 $b 内容是完全一样的,并且彼此独立,即更改$a不会影响到$b。 ?>
前言
对于访问量较大的网站来说,随着流量的增加单台服务器已经无法处理所有的请求,这时候需要多台服务器对大量的请求进行分流处理,即负载均衡。而如果实现负载均衡,必须在网站的入口部署服务器(不只是一台)对这些请求进行分发,这台服务器即反向代理。由于反向代理服务器是网站的入口,其负载压力大且易遭到攻击,存在单点故障的风险,所以我们需要一个高可用的方案来实现当一台反向代理服务器宕机的时候,另一台服务器会自动接管服务。基于以上要求,我们使用HAProxy,KeepAlived来构建高可用的反向代理系统。
Continue reading