欢迎来到天天文库
浏览记录
ID:16104822
大小:166.00 KB
页数:37页
时间:2018-08-07
《phpcms_整站代码分析讲解______完全版》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、PHPCMS整站代码分析讲解(一)首先我对PHPCMS的头程序文件开始讲解:include/common.inc.php 这个文件是程序启动的核心文件.
2、TTP_POST_FILES,$HTTP_COOKIE_VARS);/**把 $HTTP_ENV_VARS$HTTP_POST_VARS全局变量设置为NULL 因为php4.1.0以上默认以$_POST来替代。unset后防止程序运行在低版本会出现安全等问题。比如变量注入*/set_magic_quotes_runtime(0);//地球人都知道。关了字符窜入库自动转意比如 mynameison'x 转成 mynameison'x 为了最大的程序性能所以我们关掉吧~哈哈define('IN_PHPCMS',TRUE);/**程序入口标记。为什么需要这个东西呢。就好比你进一
3、个小区,保安大哥哥肯定要你签字或是挂个鸟牌证明你是从正门进来的。防止你翻墙进入去偷东西搞破坏。这个入口标记也有这个功能。在这里定义了一个常量IN_PHPCMS为TRUE,然后我在其他程序文件里面检查这个标记。如果不存在或不为真,那么就基本可以肯定你这个家伙是个小偷来的。人可能翻墙进入。但程序怎么翻墙呢。只要在php.ini文件里面激活allow_url_fopen选项,include()就可以包含URL地址了。你想下如果你有个放密码的PHP文件。如果给人家include了以后。你怕不怕。*/define('PHPCMS_ROOT',str_replace("\",'/',substr(d
4、irname(__FILE__),0,-8)));/**为了程序产品的跨平台。自动获取程序的安装目录路径,定义为PHPCMS_ROOT常量。方便以后程序使用。建议大家都这样做哦*/requirePHPCMS_ROOT.'/include/global.func.php'; /**包含全局函数global.func.php文件。里面放了些程序全局都有需要用的函数.大家看到了吧。 常量PHPCMS_ROOT已经发挥作用。这样程序给人家发布到了二级目录下。也不需要人家手动改整站根目录路径了。自己好好理解下。。。。。*/$search_arr=array("/union/i","/select
5、/i","/update/i","/outfile/i","/or/i");/**("/union/i") 这个是正则的写法?不懂正则的自己百度找教程来学。这里不详细说了*/$replace_arr=array('union','select','update','outfile','or');/**看这个意思很明了。union:连接两条SQL语句。outfile:主要用来导出数据库资料到其他介质上。干啥字要定义这两个变量呢?在global.func.php文件(前面已经加载)里面有个函数strip_sql()各位可以看下。functionstrip_sql($string){globa
6、l$search_arr,$replace_arr;returnis_array($string)?array_map('strip_sql',$string):preg_replace($search_arr,$replace_arr,$string);}函数里面定义了这两个变量为global全局变量。那么函数里就可以直接使用了。 先讲解下这个函数吧。顾名思义这个函数是过滤字符窜里面的SQL语句使得关键的SQL语句单词失效。主要过滤那些SQL语句呢。主要是这几个关键字:union select updateoutfile or等。因为这几个SQL字是极度容易在$_GET传输中给截
7、注.这个函数写得实在精妙。 is_array来判断$string是否为数组。如果是 就array_map()函数来递归过滤$string数组里面的每一个单元.每个单元是一个字符窜吧?当递归调用strip_sql()以后is_array()判断$string肯定为假了,因为$string已经不是数组而是字符窜。所以执行preg_replace()函数。这个函数很好理解了。就是替换了。*/$_POST=strip_sql
此文档下载收益归作者所有