-
Recent Posts
Categories
Meta
Blogroll
Tags
Sponsors
Monthly Archives: May 2008
DISCUZ代码分析之COOKIE篇
discuz提供了通行证 可有时候使用通行证不一定适用 就比如说那一段很长很长的url吧 看着就让人心烦 有什么解决方法捏? 那就是生成一个discuz 验证cookie 废话说完了 开始正题: 开始之前 咱先了解一下discuz的登陆机制 先来一个简单的form <?php <form action='i_login.php'> user:<input name='username' type='text'> password:<input name='password' type='password'> <input type='submit' value='login'> </form> ?> 下面 说下php方面的 我们假设改文件和discuz同一目录里 看代码 i_login.php <?php /** * 加载discuz的入口文件 当然你也可以不加 不过你得提出几个必要的函数 */ require_once './include/comon.inc.php'; … Continue reading
Apache日志中“指定的网络名不再可用”问题的解决
Apache日志中“指定的网络名不再可用”问题的解决 在Apache的logs/error.log中经常出现如下记录: [Fri Mar 16 17:28:49 2007] [warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed. [Fri Mar 16 17:28:49 2007] [warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed. [Fri Mar 16 17:28:50 2007] [warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx … Continue reading
php处理文本中的换行符
我看有些朋友说的是用header()函数。但是在html中显示,就可能碰到一些问题,如把html也当文本完全显示出来了。 要在一个html页面中显示或写入一个纯文本文件。则要动用键值。chr(13)和chr(10),其实这两个键值就是/r/n 读取文本中的换行符,用’/r/n’ 而要在txt中写入换行符,要符合windows下程序的规则,则要写入chr(13).chr(10) 例:读 explode(“\r\n”,$contents);//每行导入数组 $contents已经是文本整个读入 写 fwrite ($fp,’12345′.chr(13).chr(10));
php中echo, print, printf 和 sprintf 的区别
- echo 是命令,不能返回值。echo后面可以跟很多个参数,之间用分号隔开,如: echo $myvar1; echo 1,2,$myvar,”bold“; – print 是函数,可以返回一个值,只能有一个参数。 – printf 函数,把文字格式化以后输出,如: $name=”hunte”; $age=25; printf(“my name is %s, age %d”, $name, $age); – sprintf 跟printf相似,但不打印,而是返回格式化后的文字,其他的与printf一样。 – echo 是命令,不能返回值。echo后面可以跟很多个参数,之间用分号隔开,如: echo $myvar1; echo 1,2,$myvar,”bold“; – print 是函数,可以返回一个值,只能有一个参数。 – printf 函数,把文字格式化以后输出,如: $name=”hunte”; … Continue reading
discuz的md5加密方法
以前,人们习惯将用户的密码md5之后,存入数据库。这样就算是数据库被人非法得到,也无法得知用户的密码。 由于sql注入、跨站脚本攻击、上传漏洞、以及一些网管的粗心大意等原因,造成不少论坛被攻破,数据库被盗,这对用户的隐私和个人信息安全造成了很坏的影响。尤其是很多用户对多种网络服务使用同一密码,如果论坛密码被窃,将威胁到用户的邮箱,即时通讯,网银等一系列的安全。以至于出现了“一个密码引发的血案”。 现在常用论坛都是将用户密码用MD5等hash函数hash后,再存放在数据库中。这种做法在一定程度上提高了安全性。万一不法分子得到数据库后,只拿到用户密码的HASH值。但一般用户在设置密码时,为了怕忘记,大多数采用姓名拼音,生日,常用单词,数字串单独或组合使用的方式。所以,不法分子只需将这些数据及其hash值存放在数据库中,再通过查询hash值的方式,就能破解很多用户的密码。如果这个字典数据库足够大,并且字典比较符合人们的设置习惯的话,那威力是惊人。以至于现在网上出现了MD5 hash串查询的网站,号称用4T硬盘共存储md5记录4574亿条,能破译动网论坛83%的密码。 那么如何防范这种字典攻击和网上那种MD5 hash串查询攻击呢。我在《应用密码学》这本书上找到了答案。salt是一随机字符串,它与口令连接在一起,再用单向函数对其运算,然后将salt值各单向函数运算的结果存入数据库中。如果可能的salt值的数目足够大的话,它实际上就消除了对常用口令采用的字典式攻击,因为不法份子不可能在数据库中存储那么多salt和用户密码组合后的HASH值。当然,他们仍可以对单个用户的密码进行暴破。所以用户最好不要在不同的地方使用相同的口令。但利用 salt后的安全性还是有所示增加的。 例如discuz论坛的密码加密方式。 采用salt方式,随机获得一个字符串,然后把明文密码MD5之后,再与随机字符串连接起来之后,再次MD5。这样可极大的提高安全系数。 获得随机字串的代码: <?php function random($length, $numeric = 0) { PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000); if($numeric) { $hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) – 1)); } else { $hash = ''; … Continue reading
nginx 0.7.30 for 已经发布 windows版同时发布
(更新记录)(2008年12月31日) For windows版 Branch Package Release Date Development 0.7.30 24 December 2008 Stable 0.6.34 27 November 2008 Legacy 0.5.37 07 July 2008 Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。尽管还是测试版,但是,Nginx … Continue reading
迅雷去广告方法(不用下载补丁)
迅雷是我们常用的下载工具之一,但是我们在使用迅雷时经常有些烦人的广告,那么,我们怎么去掉它呢?修改之前关闭迅雷。 一、去广告 1、打开迅雷的安装目录 我的是C:\Program Files\Thunder Network\Thunder\Program 2、找到gui.cfg文件,然后用记事本打开 3、把它的内容改为: [URL] ADServer= LastModifyTime=Mon, 2 Apr 2007 06:32:45 GMT NavigateTimes=10 TimeSpan=300 PartnerNavigateTimers=10 PartnerTimeSpan=300 PVServer= PVPort=3076 PVTimeSpan=5 ADCountingServer= ADCountingPort=3076 HomePage= 4、同时去掉C:\Program Files\Thunder Network\Thunder\Program\AD目录下的所有文件 只留下main.gif、002.gif、new.gif和default_main.swf这四个文件(如果不留的话广告栏会是 空白的) 5、修改完后保存,然后重新启动迅雷。 二、 去热门推荐 1、打开迅雷的安装目录C:\Program Files\Thunder Network\Thunder\Profiles 2、找到UserConfig.ini文件,然后打开; 3、找到[Splitter_1]项下面的Pane1_Hide,将其值改为1(原始值为0) 4、修改完后保存,然后启动迅雷。
php中用each() 和 list() 结合使用来遍历数组
each (PHP 4, PHP 5) each — 返回数组中当前的键/值对并将数组指针向前移动一步 说明 array each ( array &$array ) 返回 array 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为 0,1,key 和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。 如果内部指针越过了数组的末端,则 each() 返回 FALSE。 例 288. each() 例子 <?php $foo = array("bob", … Continue reading
使用了CDN后取客户真实IP的PHP代码
取真实IP的php代码 (discuz修改include/common.inc.php) 用以下这段代码: if(getenv(‘HTTP_CLIENT_IP’) && strcasecmp(getenv(‘HTTP_CLIENT_IP’), ‘unknown’)) { $onlineip = getenv(‘HTTP_CLIENT_IP’); } elseif(getenv(‘HTTP_X_FORWARDED_FOR’) && strcasecmp(getenv(‘HTTP_X_FORWARDED_FOR’), ‘unknown’)) { //使用CDN后判断真实ip by CDNUNION Johnny $testip = explode(‘.’, getenv(‘HTTP_X_FORWARDED_FOR’)); if ($testip[0]==’192′ && $testip[1]==’168′) { $onlineip = getenv(‘REMOTE_ADDR’); } elseif($testip[0]==’10′) { $onlineip = getenv(‘REMOTE_ADDR’); } … Continue reading
strcasecmp()函数
Definition and Usage 定义和用法 The strcasecmp() function compares two strings. strcasecmp()函数的作用是:对两个字符串进行比较。不区分大小写 This function returns: 该函数将返回下列值: * 0 – if the two strings are equal 0 – 如果字符串相等 * 0 – 如果string1大于string2 Syntax 语法 strcasecmp(string1,string2) Parameter参数 Description描述 string1 Required. Specifies the … Continue reading