MD5是在Web应用程序中最常用的密码加密算法。由于MD5是不可逆的,因而经过MD5计算得到后的密文,不能通过逆向算法得到原文。
回顾在Web应用程序中使用MD5加密文本密码的初衷,就是为了防止数据库中保存的密码不幸泄露后被直接获得。但攻击者不但拥有数据量巨大的密码字典,而且建立了很多MD5原文/密文对照数据库,能快速地找到常用密码的MD5密文,是破译MD5密文的高效途径。然而,MD5密文数据库所使用的是最常规的MD5加密算法:原文-->MD5-->密文。因此,我们可以使用变换的MD5算法,使现成的MD5密文数据库无所作为。
下面演示一些变换算法的例子
Windows Apache PHP MySQL 搭建
安装php,有两种方式,这里采用其中一种,成为apache的组件
下载php: php-5.1.2-win32 和 php-5.1.2-installer.exe我就下了这两个~~~
然后将php里面的dll文件拷贝到windows/system32里面,将php.ini-dist 改位php-ini拷贝到windows目录
下载apache 安装到一个文件夹
然后修改安装后文件夹apache2conf
里面的配置文件httpd.conf
修改
Listen 127.0.0.1:80 // 其中127.0.0.1是你的ip地址
添加
用php把现有动态新闻页面改成静态页的方案
请问,当我浏览某个网页时,我想在服务器的某个路径下生成对应的静态网页,以方便调用,该怎么处理比较好?
我的程序以前写的,没有这个功能.因此我想有没有比较好的在不大量改动到原程序的情况下实现该功能.
回复人:arcow(冲星) ( 五级(中级)) 信誉:100 2006-2-28 18:02:45
比如你的动态显示页面为
display.php?id=1
的话
你可以在diplay里判断一下是否在对应目录存在对应id的文件名(这里假设文件为id号 html即1.html,2.html,...)
你判断 $id."html"这个文件是否存在于服务器,如果存在就直接跳转到这个页面,要是不存在的话就创建(建义用一个函数来创建,这样对页面改动不大,比如createHTML($_GET['id']),至于这个函数怎么写,我想你应该知道)然后再跳转
-------------------------------------------------
回复人:ice_berg16(寻梦的稻草人) ( 三星(高级)) 信誉:125 2006-2-28 21:33:13
假设你显示文章的页面为
showNews.php?id=34
那么可以这么做
ob_start();
//你的正常程序代码
$html=ob_get_contents();
ob_end_clean();
$fp=fopen($_GET['id'].".htm", "w");
fwrite($fp, $html);
fclose($fp);
PHP-Nuke存在远程SQL注入漏洞 后台数据库堪忧
描述:
PHP-Nuke是一个广为流行的网站创建和管理工具,它可以使用很多数据库软件作为后端,比如MySQL、PostgreSQL、mSQL、Interbase、Sybase等。
PHP-Nuke的Your_Account模块实现上存在输入验证漏洞,远程攻击者可能利用此漏洞对服务器程序执行SQL注入攻击。
PHP-Nuke的Your_Account模块没有对username参数做充分的过滤检查,远程攻击者可能在此参数中插入恶意的SQL命令,从而非授权获取对后台数据库的操作。
受影响系统:
PHP-Nuke PHP-Nuke 7.8
不受影响系统:
PHP-Nuke PHP-Nuke 7.9 patch 3.1
补丁下载:
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://phpnuke.org/
PHP学习:Smarty的分页实现
Smarty中的分页有很多方法。
1。使用Smarty的分页插件,如Pager,pagnition,sliding_page等,不过感觉都不是太好,几乎都有一些Bug。
有兴趣试用和自己去改进的朋友可以看看:
http://smarty.php.net/contribs/plugins/view.php/function.pager.php
http://www.phpinsider.com/smarty-forum/viewtopic.php?t=2327
http://www.phpinsider.com/smarty-forum/viewtopic.php?t=1604
2。使用分页类库,呵呵,这个网上就太多了,一大把,不过我还没有发现写得很好的,特别是容易扩展的。
在搜索的时候还看到一个号称分页类终结者的,哈哈,有点好笑。分页类中把SQL都包含进去了,这个是绝对不能容忍的,可以说作者对OO的认识还比较浅。
不过分页类库不一定适合Smarty,特别是当记录集数据是二维数组时,我不想放弃Smarty方便的Section。这是我没有用PEAR::Pager的原因,否则还要先对数组进行处理,也很麻烦。
3。自己写啦。。我暂时没有选择写成类库,不过改写很容易,下面主要讲讲思路。
其实Smarty的分页非常简单,首先我们可以在模板中这样实现:
{$pager_Links}
{section name="list" loop=$productID start=0 max=$pager_Total step=1}
{if ($smarty.section.list.index >= $pager_StartNum )&& ($smarty.section.list.index <= $pager_EndNum )}
产品名称:{$productName[list]}
产品类别:{$catalogName[list]}
{/if}
{/section}
以上就可以将一个记录集(二维数组)轻松地打印出来,而且限定每页的显示范围。
{$pager_Links} 分页标签(就是上一页,下一页等)
max=$pager_Total 记录总数
$smarty.section.list.index >= $pager_StartNum )&& ($smarty.section.list.index <= $pager_EndNum )
这一行是用来限定记录的显示范围的,如果记录的索引落在这个范围之内就显示出来,否则就不显示。
以上可以看出,在PHP文件中,我们只需要传递4个变量给Smarty对象:
1.记录总数
2.每页记录起始数
3.每页记录结束数
4.分页标签
以下代码代参考:
标签可以自己去写了,可以扩充成更强大的。现在我没有时间,不然会写一个
<?php
$smartyArr = $smarty->get_template_vars();
//记录总数,每页显示记录条数,总页数
MySQL 5.0.16 乱码问题处理办法
1 设置phpMyAdmin
Language:Chinese simplified (zh-utf-8)
MySQL 字符集:UTF-8 Unicode (utf8)
MySQL 连接校对 gbk_chinese_ci
2 创建数据库时
整理设置成 gbk_chinese_ci
3 用SQL建立表中
ENGINE=MyISAM DEFAULT CHARSET=gbk;
ENGINE=InnoDB DEFAULT CHARSET=gbk AUTO_INCREMENT=40 ;
4 检查表结构中
varchar(100) 的整理属性为gbk_chinese_ci
其它类型的整理属性为空
5 代码中加上
$db->query("SET CHARACTER SET GBK"); Linux下需要,Windows下不需要这个相当于Connection Character Sets and Collations
PHP 提示和技巧
1. 当您在寻找关于某个具体的 PHP 函数的信息时,请转至 http://php.net/ 。例如:http://php.net/join。这将直接把您带到您地理位置附近的一台服务器上的联机手册中的正确位置上。
2. 试试这个:pear install apc 。pear 命令是一个有用的安装程序,它甚至可以用来安装用 C 编写的 PHP 扩展。在这种情况下,它将安装 APC opcode 高速缓存扩展。
3. 使用 opcode 高速缓存来提高性能。参见 #2。
4. 在 PHP 中混合 OOP 和过程代码不存在任何错误。在对象有意义的时候使用对象,其余情况转用过程。
5. 用您自己定制的 C 或 C 扩展来扩展 PHP 比您想象的要更容易。参见 PHP 源代码版本中的 README.EXT_SKEL。
6. echo <<<EOB 语法对于用完整的 $variable 替换来输出文本块非常有用,并且无需避开任何东西。EOB;
7. PATH_INFO 很棒!用它来清除难看的 URL。
8. 使用一个记录程序,pear install apd。
9. 数据库抽象大部分是虚构的故事。直接的数据库调用没什么错,它利用您选择的数据库必须提供的所有技巧和窍门,以从中获得尽可能高的性能。
10. 保持使用您的基础技术,并构建简单的程序块。使用无线程的 Web 服务器,避免复杂的框架和抽象层,从而给您自己机会来跟踪和调试可能出现的任何问题。解决 Web 问题很简单;别试图使它变得困难。
PHP 5.0对象模型深度探索之起步
面向对象编程被设计来为大型软件项目提供解决方案,尤其是多人合作的项目. 当源代码增长到一万行甚至更多的时候,每一个更动都可能导致不希望的副作用. 这种情况发生于模块间结成秘密联盟的时候,就像第一次世界大战前的欧洲。
//haohappy注:喻指模块间的关联度过高,相互依赖性太强.更动一个模块导致其它模块也必须跟着更动。
想像一下,如果有一个用来处理登录的模块允许一个信用卡处理模块来分享它的数据库连接. 当然出发点是好的,节省了进行另一个数据库连接的支出.然而有时,登录处理模块改变了其中一个变量的名字,就可能割断了两者间的协议.导致信用卡模块的处理出错,进而导致处理的模块出错. 很快地,体系中所有无关的模块都可能由此出错.
因此,我觉得有点戏剧性地,绝大多数程序员都对耦合和封装心存感激. 耦合是两个模块间依赖程度的量度. 耦合越少越好.我们希望能够从已有的项目中抽走一个模块并在另一个新项目中使用.
我们也希望在某个模块内部大规模的更动而不用担心对其他模块的影响. 封装的原则可以提供这个解决方案.模块被看待成相对独立,并且模块间的数据通信通过接口来进行. 模块不通过彼此的变量名来窥探另一个模块,它们通过函数来礼貌地发送请求.
封装是你可以在任何编程语言中使用的一个原则. 在PHP和许多面向过程的语言中,可以偷懒是很有诱惑的.没有什么可以阻止你通过模块来构建一个假想的WEB. 面向对象编程是使程序员不会违背封装原则的一种方法.
在面向对象编程中,模块被组织成一个个对象. 这些对象拥有方法和属性. 从抽象的角度来看,方法是一个对象的所做的动作,而属性是对象的特性.从编程角度来看,方法就是函数而属性是变量. 在一个理想化的面向对象体系中,每个部份都是一个对象. 体系由对象及对象间通过方法来形成的联系构成.
一个类定义了对象的属性. 如果你在烘烤一组甜饼对象,那么类将会是甜饼机. 类的属性和方法是被调用的成员. 人们可以通过说出数据成员或者方法成员来表达.
每种语言提供了不同的途径来访问对象. PHP从C 中借用概念,提供一个数据类型用来在一个标识符下包含函数和变量。最初设计PHP的时候,甚至PHP3被开发出时,PHP并不打算提供开发超过10万行代码的大型项目的能力。随着PHP和Zend引擎的发展,开发大型项目变得有可能,但无论你的项目规模多大,用类来书写你的脚本将可以让代码实现重用。这是一个好主意,特别当你愿意与别人分享你的代码的时候。
专家预言:PHP将比Java更受欢迎
Netscape共同创办人Marc Andreessen在周三(10/19)举行的Zend/PHP会议上预言,简单的PHP描述性语言撰写工具,在Web-based应用程序的开发上,将会比Java更受欢迎。
在升阳(Sun Microsystems)于1995年发表Java之后,由于Java的友善接口让工程师设计软件更为容易,受到工程师欢迎,但十年下来Java陆陆续续被加入了强大的功能,反而使它变得不容易操作。Marc Andreessen指出,现在的Java可能比C 更难学,在此同时,PHP传承了Java的简单精神,并创造一个比Java更容易使用的程序开发环境。
PHP为一开放原始码项目,其中包括可以简化程序的描述性语言引擎以及一个大的链接库,也有专门开发PHP的公司,如Zend就有销售PHP套装产品、程序撰写工具及技术支持服务。
Andreessen的看法可能很难博得Java拥护者的认同,因为现阶段全球仍有数百万专研Java的工程师,也有数百家公司参与Java Community Process(JCP),在JCP中共同主掌Java的命运。但是,就算是大力扶植Java、甚至以Java为WebSphere服务器软件核心的IBM,也认为PHP的前途会比Java来得好。
IBM新网络科技事业处副总裁Rod Smith就说,「简单」是PHP最大的特色,而且它不会为了与其它语言竞争而加入新的语言功能,Java显然就不是这么做。
而且,PHP的势力也不小,目前约有2200万的网站采用PHP,包括Yahoo!、Lufthansa等知名网站,数量并持续增加中,并有450个软件工程师有权去审核在PHP软件上的任何变动。
与Java相较,PHP可用范畴限制较多,它仅能用在网络服务器上,不像Java,同时可用在网络服务器、个人计算机、手机、芯片卡或其它装置。
Java和PHP除了在某些方面相互竞争之外,某个程度来看,也在彼此靠陇。甲骨文产品策略副总Ken Jacobs表示,即使甲骨文(Oracle)销售同时可执行Java及PHP的Java服务器与数据库软件,但正为Java加上一项额外的新功能,让这两个软件项目可以协同运作;更具体的说,Java规格需求223(JSR 223)将会「协助建构在Java社群与PHP社群之间的那座桥梁」。
日前才发表可以分享照片等内容网站「Ning」的Marc Andreessen也说,现在Ning也同时执行Java与PHP,其中核心系统是由Java组成,比起该站所有可看见的应用程序都是由PHP写成,Java更像是操作系统层级。
就像其它诸如Linux及Apache的开放原始码项目,PHP目前也受到计算机工业主要大厂的庇佑,像IBM跟Oracle都致力开发让PHP软件可以撷取旗下数据库的程序。事实上,IBM与Oracle的行为就像在为PHP背书,连这两大厂都支持PHP,证明PHP也许就是个好东西。
有关在Windows下配置PHP Apache Optimizer失败的问题解决方案
昨晚在Windows XP Professional [带IIS]下安装了PHP 5.0.5和 Apache 2.0.54[监听端口8088].
今天在安装Discuz论坛时被要求安装Zend-Optimizer以支持加密过的PHP文件.
下载到Zend-Optimizer 2.5.7的Win32安装文件
在安装时,开始很顺利
Apache Root和php.ini选择路径分别为:
E:/Program Files/Apache Group/Apache2
E:/PHP5
可是到后来需要重启Apache的时候,重启失败.手动重启.提示安装成功.可是在phpinfo.php中察看时,发现Optimizer并没有和PHP关联上.有关Zend的提示信息为:
Zend Engine v2.0.5,Copyright(c) 1998-2004 Zend Technologies. 并没有Optimizer的信息.加密文件也无法正确执行.
开始以为是Apache重启的问题,反复试验后发现Apache正常.后来在网上搜索,也没有发现相关的解决方案.后来突然想到之前复制了一个Php.ini文件到了C:/Windows目录下,想是不是实际上使用的那个ini文件.
尝试重装Optimizer,ini文件路径选择C:/Windows.还是手动重启Apache.
安装结束察看phpinfo.php,Zend提示信息为
Zend Engine v2.0.5,Copyright (c) 1998-2004 Zend Technologies.
With Zend Extention Manager v1.0.6,Copyright(c) 2003-2004,by Zend Technologies
With Zend Optimizer v2.5.7,Copyright(C) 1998-2004,by Zend Technologies
成功安装Optimizer,执行Discuz加密文件正常!
总结:在安装Optimizer时,php.ini文件一定要选择在Windows目录下安装的实际使用的那个.其实在安装时它是提示C:/Windows的,不过自己没有注意,因此导致了安装的失败.
PHP Shell的编写(改进版)
以前写过一个没有任何技术含量的PHP CMD Shell,总是觉得功能很弱,并且对一些问题没有处理好,比如浏览目录等,后来深入学习PHP 后,发现了很多有趣的函数个,于是重新简单的编写了一个新的PHP Shell,希望大家喜欢!
程序介绍:
程序:PHP Web Shell
版本:v0.4
功能:
1.可以支持目前主流的操作系统: Win32/*nix/*BSD
2.执行系统命令/程序
3.浏览目录
未来功能:
1.支持在线 上传/下载 文件功能
2.支持在线 新建/删除/添加/修改 文件功能
程序代码:
PHP将将 XML 映射为 HTML的代码实例
以下范例将 XML 文档中的标记符直接映射成 HTML 标记符。在“映射数组”中不存在的元素将被忽略。当然,该范例将只对一个特定的 XML 文档有效。