一、描述
intval函数有个特性:”直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时()结束转换”,在某些应用程序里由于对intval函数这个特性认识不够,错误的使用导致绕过一些安全判断导致安全漏洞.
二、分析
PHP_FUNCTION(intval)
{
zval **num, **arg_base;
int base;
switch (ZEND_NUM_ARGS()) {
case 1:
if (zend_get_parameters_ex(1, &num) == FAILURE) {
WRONG_PARAM_COUNT;
}
base = 10;
break;
case 2:
if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(arg_base);
base = Z_LVAL_PP(arg_base);
break;
default:
WRONG_PARAM_COUNT;
}
RETVAL_ZVAL(*num, 1, 0);
convert_to_long_base(return_value, base);
}
Zend/zend_operators.c->>convert_to_long_base()
……
case IS_STRING:
strval = Z_STRVAL_P(op);
Z_LVAL_P(op) = strtol(strval, NULL, base);
STR_FREE(strval);
break;
当intval函数接受到字符串型参数是调用convert_to_long_base()处理,接下来调用Z_LVAL_P(op) = strtol(strval, NULL, base);通过strtol函数来处理参数。
函数原型如下:
long int strtol(const char *nptr,char **endptr,int base);
这个函数会将参数nptr字符串根据参数base来转换成长整型数,参数base范围从2至36,或0.参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。
流程为:
strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时()结束转换,并将结果返回。
那么当intval用在if等的判断里面,将会导致这个判断实去意义,从而导致安全漏洞.
三、测试代码
<?php
$o = 0.1;
for($a = 1; $a < 100; $a++){
$o += 0.1;
echo "<br>intval($o) = ".intval($o);
if(intval($o)){
print("&nbsp;true");
}else{
print("&nbsp;false");
}
}?>

输出结果:
intval(0.2) = 0 false
intval(0.3) = 0 false
intval(0.4) = 0 false
intval(0.5) = 0 false
intval(0.6) = 0 false
intval(0.7) = 0 false
intval(0.8) = 0 false
intval(0.9) = 0 false
intval(1) = 0 false
intval(1.1) = 1 true
intval(1.2) = 1 true
intval(1.3) = 1 true
intval(1.4) = 1 true
intval(1.5) = 1 true
intval(1.6) = 1 true
intval(1.7) = 1 true
intval(1.8) = 1 true
intval(1.9) = 1 true
intval(2) = 2 true
…..


必须从0.7开始加,从0.8开始加都是正确的,下面正常:
$o = 0.7;
$o += 0.1;
$o += 0.1;
$o +=0.1;
echo $o;
echo "<hr>";
echo "<br>intval($o) = ".intval($o);
if(intval($o)){
print("&nbsp;true");
}else{
print("&nbsp;false");
}

来源:http://www.cndong.cn/php-built-in-function-intval-the-use-of-inappropriate-analysis-of-security-vulnerabilities.html
经常性迟到
你上班或开会经常迟到吗?迟到是造成使老板和同事反感的种子,它传达出的信息:你是一个只考虑自己、缺乏合作精神的人。
拖延
虽然你最终完成了工作,但拖后腿使你显得不胜任。为什么会产生延误呢?如果是因为缺少兴趣,你就应该考虑一下你的择业;如果是因为过度追求尽善尽美,这毫无疑问会增多你在工作中的延误。社会心理学专家说:很多爱拖延的人都很害怕冒险和出错,对失败的恐惧使他们无从下手。
怨天尤人
这几乎是失败者共同的标签。一个想要成功的人在遇到挫折时,应该冷静地对待自己所面临的问题,分析失败的原因,进而找到解决问题的突破口。
一味取悦他人
一个真正称职的员工应该对本职工作内存在的问题向上级说明并提出相应的解决办法,而不应该只是附和上级的决定。对于管理者,应该有严明的奖惩方式,而不应该做“好好先生”,这样做虽然暂时取悦了少数人,却会失去大多数人的支持。
传播流言
每个人都可能会被别人评论,也会去评论他人,但如果津津乐道的是关于某人的流言蜚语,这种议论最好停止。世上没有不透风的墙,你今天传播的流言,早晚会被当事人知道,又何必去搬石头砸自己的脚?所以,流言止于智者。
对他人求全责备、尖酸刻薄。
每个人在工作中都可能有失误。当工作中出现问题时,应该协助去解决,而不应该一味求全责备。特别是在自己无法做到的情况下,让自己的下属或别人去达到这些要求,很容易使人产生反感。长此以往,这种人在公司没有任何威信而言。
出尔反尔
已经确定下来的事情,却经常做变更,就会让你的下属或协助员工无从下手。你做出的承诺,如果无法兑现,会在大家面前失去信用。这样的人,难以担当重任。
傲慢无礼
这样做并不能显得你高人一头,相反会引起别人的反感。因为,任何人都不会容忍别人瞧不起自己。傲慢无礼的人难以交到好的朋友。人脉就是财脉,年轻时养成这种习惯的人,相信你很难取得成功。
随大流
人们可以随大流,但不可以无主见。如果你习惯性地随大流,那你就有可能形成思维定势,没有自己的主见,或者既便有,也不敢表达自己的主见,而没有主见的人是不会成功的。
来源:http://www.zeuux.org/group/job-info/bbs/content/6407/
自己在线下安装一次:
把:
data目录下的:
cache_skinlist.php
mod_template.php
替换线上的俩文件即可,恢复到defaule模版,再做操作,还以为是写入DB的,看来不是,是写入文件中的。
Bo-blog是一款非常优秀的个人博客发布系统,非常适合个人用户使用。向东的博客(www.jackxiang.com)认为,bo-blog安装不困难,困难在于管理一个博客站点,而管理最让人头疼的问题就是如何管理好博友的评论和留言,拒绝垃圾广告信息和无意义的评论。在bo-blog得管理系统中,已经具备了这些功能,只需要我们稍加设置,就可以有效拒绝垃圾评论和广告信息的产生,博主即使不懂技术,用起来也会得心应手。这就是bo-blog的强大之处。
Bo-blog的演示和下载请访问:Bo-Blog开源博客系统
向东的博客(www.jackxiang.com)告诉你四招bo-blog设置技巧,可以有效防止垃圾评论和广告信息的产生。
一、启用发言验证码
设置方法:登陆bo-blog管理后台,点击“常规设置”,选择“blog设置”,启用“基础设置”下的“发言时启用验证码”功能。
启用该功能后,用户发表 评论、留言都需要手动输入验证码,这样就可以有效拒绝机器人、马甲的自动发帖,可以避免产生大量的垃圾信息。
image0018 150x150 Bo blog维护经验:防止垃圾评论(留言)的大量产生
二、开启bo-blog关键字词过滤功能
登陆bo-blog管理后台,点击“杂项设置”,中的“限制设置”,就可以有针对性、过滤博友得评论、留言内容,将一些含有垃圾留言特征的词汇直接拒之门外。
image0036 150x150 Bo blog维护经验:防止垃圾评论(留言)的大量产生
三、开评论审核功能
如果博主有充分的时间,或博客站前期评论很少,建议博主启用“所有言论都须经过审核”,开启该功能后,只有通过人工审核得评论,才允许发布。使用该功能,需要消耗博主的大量精力和时间,但可以100%拒绝垃圾信息的产生。
开启评论审核的方法:
登陆bo-blog管理后台,点击“常规设置”,选择“参数设置”下面的“留言、评论及应用”开启功能板块中的“所有言论都必须经过审核”
image0055 150x150 Bo blog维护经验:防止垃圾评论(留言)的大量产生
四、如果博主疏忽,博客站点已经有大量的垃圾评论和留言的解决办法
如果你的博客网站之前疏于防范,产生了大量的垃圾信息。向东的博客(www.jackxiang.com)在这里介绍一个“宁杀误纵”的方法。就是操作mysql数据库表,执行mysql语句,将信息直接删除。是用该方法,需要博主有一定的技术背景,请谨慎选择操作。
操作方法:
登陆管理员后台,选择“数据库维护”下的“MYSQL”,然后执行下列SQL语句删除信息的命令,即可完成。
下列命令解析与用户说明:
命令:                                                            命令功能
delete from [db]replies where reproperty=2         删除所有未审核的评论
delete from [db]messages where reproperty=2     删除所有未审核的留言
delete from [db]replies where reproperty=0/        删除所有已审核的评论(非常危险)
delete from [db]replies where reproperty=5         删除所有未审核的引用
delete from [db]replies where reproperty=4         删除所有已审核的引用
如:网站已经有上千条评论了,要快速清除这些未审核的评论,我们只要执行 (delete from [db]replies where reproperty=2)一次删除命令就可以了。
参考:http://jackxiang.com/post/4307/
来源:http://www.jackxiang.com/1175.html
http://bbs.umiwi.com/thread-114319-1-1.html
  
开年预判:中国累了,下半年开始打盹阅读全文
因为特别的原因,需要从Memcached中导出所有的数据。因为Memcached对数据的遍历是明确不支持的,所以必须想歪门邪道的方法。

现在网络上主要有两种思路,一种是通过Memcached提供的stats cachedump命令导出,例如下面这些网址:

dump all keys from memcached
Dumping MemcacheD Content (Keys) with PHP
Robbin的文章
以上文章都利用这个命令导出了部分数据。但事实上,cachedump的输出会限制在 2*1024*1024=2M 字节的长度内(Memecahed source: items.c, func: do_item_cachedump),其导出的格式如下所示:

ITEM key990017 [1 b; 1270394155 s]
ITEM key990016 [1 b; 1270394155 s]
ITEM key990015 [1 b; 1270394155 s]
ITEM key990014 [1 b; 1270394155 s]
即使不计算key的长度,每一条数据至少要占掉近三十个字节,2M最多到几万项数据。对于Item数量很大的情况下,这种方法并不能导出全部数据。

下面的地址佐证了这些观点。

官方邮件列表上的解释
上面提到的文章 memcache dump and load 的读者也在评论中进行了分析
第二种思路来自 Twitter infrastructure team 的 Evan Weaver 的 peeping into memcached , 利用 linux 的 ptrace 系统调用导出memcached进程中数据,分析这些数据得到memcached的所有Key。

但是这种方式有其限制的,一方面,编译Memcached时必须编译入调试信息 (参见link); 另一方面,在分析时对内存消耗太大。我们对一个只使用了64M内存、含有76万左右数据项的Memcached进程进行分析,在完成23万左右数据项时,分析进程占用内存的达到1040M,导致虚拟机内存用满,关闭了该进程。

因为我们现在运行的memcached是不带编译符号的,所以放弃了第二种方式。 第一种方式,则只能考虑怎么将slabs中的数据分批导出来。 Memcached 支持一个可选的 slabs reassign 命令,可以将一个slab内的数据项移动到其他slab。但这个命令必须在编译 memcached 时加入该特性。

最后,还是利用了第一种方法,每一次导出一批数据以后就从memcached中删除这一批数据,直到全部导出为止。 虽然这种办法很土,但是还是能够应付一次性数据迁移。 当然这是不得以而为之,明智的做法还是在一开始就不要将需要持久化的数据持久化到其他服务中,而不是只存放于memcached中。

来源:http://blog.feihoo.com/2010/04/dump_memcached.html
在北京很多人都是住在郊区,每天坐车到市区上班。但在我老家相反,镇上的有点钱的人都在周围城里买了房子,住在城里,但每天开车到镇里上班。
很简单,城市里面商品集中切方便,也就是城市是生活的母体,而生活来源最好是靠近城市母体,如:华为在深圳郊区有活,就会有人去,进而反作用与当地城镇化。
因为中国经济发展水平落差太大了,地域之间贫富差距、生活水平就是天上人间,所以大家即使倾家荡产,也要在大城市里面挤出一片巴掌大的地方来,是人心使然,大家无非是想要更幸福一点生活而已。
同时,大城市太大,资源过渡集中,在一定的程度上剥夺了小地方的资源,乃至发展。

近期出台房事政策很明显,我党需要通过高房租,以及内外地工资的差距小,让大家都回本地(西部)去,达到减少城市的规模和人口压力,实现真正的区域平衡,
同时人口老龄化问题,统计数据政府有数的,10年后老人都不在时,现在的年轻一代的人口完全住得下,这事国家数据保密,但遏制建房的事情是必要和必须的,让你少建房也是为人民大众和政府的经济得以修养和发力前的准备,政府必须转型经济体制,由房子转向和扩大消费需求。
有些人可能会因为沿海和东部地方房价依旧坚挺,认为其还有很高的增长价值,其是盲人摸象,国家的发展战略和方向改变,必将稳住东部,而发力西部的待开发,
国家在前10年的西部大开发从某种角度来说是失败的。但是,进过东部10年的现在积淀,以及国际局势的发展,国内生活水平的提高,条件慢慢成熟。后续10年,将是挥师西部的大好时机。
适当的通货膨胀反而是一个催化剂,多余的钱又继续增值,国家只需适当在西部做一定的利润诱导,它让钱不断的进入西部。遏制房价,钱必须给引导向国家事先准备好的区域和领域去的。
这点是大势,得看清楚。
在 WEB 开发中,会使用到页面锚点。HTML 页面锚点用于链接到一个页面的某一章节。W3School 中说到,创建锚点使用 <a> (锚)标签和 name 属性,但这不是创建页面锚点的唯一方法。下面简要说一下制作 HTML 页面锚点的两种方式。

我们可以利用 W3School 的在线测试工具来进行测试。打开链接后的测试代码使用的是 <a href=”#C4″> 和 <a name=”C4″>,测试没有问题。再将“ <h2> <a name=”C4″>Chapter 4 </a> </h2>”改为“ <h2 id=”C4″>Chapter 4 </h2>” 后进行测试,效果一样。

说明,制作页面锚点除了使用 锚点标签 name 属性之外,还可以使用 id 属性。锚点 <a> 标签中 href 属性的值为 # 开头加上目标的 name 或 id 的值:

<html>
<body>
<p>
<a href="#method1">页面锚点方法一</a>
</p>
<p>
<a href="#method2">页面锚点方法二</a>
</p>
<h2><a name="method1">方法一</a></h2>
<p>使用锚标签的 href 和 name 属性</p>
<h2 id="method2">方法二</h2>
<p>使用锚标签和 id 属性</p>
</body>
</html>


来源:http://magicalboy.com/html-named-anchors.html#method1
在php中,可以使用Header函数做一些有趣的事情,用户验证就是其中一个很有意思的功能。具体用法:
<?php
//判断用户名和密码是否相同
if(!$PHP_AUTH_USER || !$PHP_AUTH_PW){
  header("WWW-Authenticate: Basic Realm=".mb_convert_encoding("你好", "GBK", "UTF-8"));
  header("HTTP/1.0 401 Unauthorized");
  $title = "请与管理员联系!";
  //include("header.php");
  //输入提示消息
  echo " <br> <font color=red>请与管理员联系,获取登录的用户名和密码! </font> <br>";
  //include("footer.php");
  exit;
}
else{
  //设置用户登录的用户名和密码!
  if($PHP_AUTH_USER != "admin" && $PHP_AUTH_PW != "123"){
    $title = "";
    //include("header.php");
    echo "Incorrect Login.";
    //include("footer.php");
    exit;
  }
}
echo "登陆成功!";
?>

以上代码是我测试的代码Ok。
来源:http://www.ljf.cn/2008/3/Item23839.html






www-authenticate是一种简单的用户身份认证技术。
很多验证都采用这种验证方式,尤其在嵌入式领域中。
优点:方便
缺点:这种认证方式在传输过程中采用的用户名密码加密方式为BASE-64,其解码过程非常简单,如果被嗅探密码几乎是透明的.

服务器收到请求后,首先会解析发送来的数据中是否包含有:
Authorization: Basic XXXX=这种格式的数据
如果没有这样的header数据
那么服务器会发送HTTP信息头WWW-Authenticate: Basic realm=""到浏览器
要求浏览器发送合法的用户名和密码到服务端,为了进一步告知浏览器,这个页面需要认证 我们最还还是接着发送一个401错误
Header("HTTP/1.0 401 Unauthorized");

用户输入用户名:admin 密码:admin后,浏览器将以下面这种格式将数据发送给服务器端:Authorization: Basic YWRtaW46YWRtaW4=
Authorization: Basic为www-authenticate认证的标准HTTP信息头
YWRtaW46YWRtaW4=是经BASE-64加密后的用户名和密码
经解密后的格式为 admin:admin

这时我们就可以用过PHP的全局变量来使用它们了
$_SERVER['PHP_AUTH_USER'];
$_SERVER['PHP_AUTH_PW'];

路由器都是这么做的



来自:http://blog.163.com/hongshaoguoguo@126/blog/static/18046981201322384241640/
HTTP协议状态码,调用函数时候只需要将$num赋予一个下表中的已知值就直接会返回状态了。
阅读全文
2011 做点什么?

眼看着越来越多的解决方案,越来越开放的技术分享,不由得让人生疑:架构是否已经不再重要?其实,构建一般中到大型的站点,已经没什么秘密技术可言(比如,还有人一度放出来"腾讯大讲堂"这样的内部信息资料,颇为戏剧性,但大家看了之后也就是新鲜几天而已,网络中更有价值的信息已经是比比皆是了)。重要的是如何用成熟的技术将产品做好,加快开发节奏,更快改进产品质量。

所以,对我自己而言,新的一年重要的还是回归基本技术,和团队一起将丁香园( http://dxy.com )的产品做好,"望着天上的星,也要看着脚下的坑",关注新东西,更要避免因为技术冒进造成不必要的人力物力浪费,说起来容易,真的做起来,怕是也没那么简单。

来源:http://www.dbanotes.net/opensource/2011_tech_review.html
一个班是10-12个人,一个排是三个班,30--40人,一个连三个排,90--120人,

一个营三个连270--300人,一个团三个营900--1000人,一个旅三个团3000-4000人,一

个师三个旅10000--12000人,一个军三个师30000--35000人,一个司令管三个军大约

100000人。
分页: 141/339 第一页 上页 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 下页 最后页 [ 显示模式: 摘要 | 列表 ]