亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于PHP安全模板引擎的設(shè)計(jì)與實(shí)現(xiàn)

        2014-10-21 14:24:29劉倍雄臧艷輝
        電子世界 2014年12期
        關(guān)鍵詞:引擎黑客危險(xiǎn)

        劉倍雄 臧艷輝

        【摘要】本文提出了一種自定義的基于PHP模板引擎的安全設(shè)計(jì)方法,針對(duì)編譯型模板引擎,總結(jié)了PHP當(dāng)中的不安全的因素,使用正則匹配實(shí)現(xiàn)對(duì)編譯模板安全過濾,提高了模板引擎的安全性。

        【關(guān)鍵詞】模板引擎;模板安全

        PHP是一種被廣泛使用的腳本語言,尤其適合于web開發(fā),它具有跨平臺(tái),容易學(xué)習(xí),功能強(qiáng)大等特點(diǎn),很多知名的web應(yīng)用系統(tǒng)都是使用php開發(fā)的,如Discuz、phpwind、wordpress、boblog等等。由于PHP系統(tǒng)程序大多數(shù)采用編譯型模板引擎機(jī)制,故從模板出發(fā),攻擊網(wǎng)站成為功能,本文從模板引擎出發(fā),對(duì)PHP模板安全機(jī)制做了系統(tǒng)的分析和設(shè)計(jì),有效地對(duì)PHP危險(xiǎn)函數(shù)操作進(jìn)行安全過濾,提高系統(tǒng)的安全性,降低黑客從模板引擎攻擊的危險(xiǎn)性。

        1.編譯型模板引擎工作原理

        在模板引擎的運(yùn)行中,編譯型模板接到URL請(qǐng)求后,首先需要判斷是否第一次請(qǐng)求該URL,如果是則將該URL所需的HTML模板文件編譯成PHP文件,然后進(jìn)行重定向;否則則認(rèn)為該URL的模板已經(jīng)被編譯過了,可以立即重定向。編譯型模板除了第一次編譯的成本比較高之外,只要不修改模板文件,編譯好的 cache腳本就隨時(shí)調(diào)用,從而省去了大量的解釋時(shí)間。由編譯模板的工作機(jī)制可以看出,只要從HTML的模板出發(fā),就可以達(dá)到攻擊網(wǎng)站的目的,可以嵌入惡意代碼,加入隱藏鏈接或復(fù)制、刪除文件的目的。

        2.模板引擎危險(xiǎn)因素分析

        在PHP當(dāng)中危險(xiǎn)的操作有很多,如刪除數(shù)據(jù)表、刪除數(shù)據(jù)、刪除文件,復(fù)制文件,下載文件,修改Session和Cookie數(shù)據(jù),上傳和解壓文件等等,現(xiàn)將有關(guān)PHP編譯型模板引擎的危險(xiǎn)因素總結(jié)如下:

        1)不允許直接操作數(shù)據(jù)庫(kù)。禁止直接鏈接數(shù)據(jù)庫(kù)并執(zhí)行數(shù)據(jù)庫(kù)操作函數(shù),系統(tǒng)使用數(shù)據(jù)庫(kù)操作類封裝的方法操作數(shù)據(jù)庫(kù),在操作過程當(dāng)中嚴(yán)格過濾危險(xiǎn)SQL腳本代碼,如XSS腳本,又叫CSS (Cross Site Script,簡(jiǎn)稱跨站腳本攻擊),惡意攻擊者往Web頁(yè)面里插入惡意HTML代碼,或禁止用戶直接執(zhí)行數(shù)據(jù)庫(kù)操作語句,直接調(diào)用遠(yuǎn)程惡意數(shù)據(jù)庫(kù)數(shù)據(jù),危險(xiǎn)函數(shù)有mysql_開頭的數(shù)據(jù)庫(kù)管理函數(shù),如mysql_query()。

        2)不允許修改session,禁止對(duì)session進(jìn)行操作,防止黑客偽造session數(shù)據(jù)登錄網(wǎng)站或者獲取更高級(jí)的web管理權(quán)限,對(duì)網(wǎng)站安全構(gòu)成實(shí)質(zhì)性威協(xié),危險(xiǎn)的函數(shù)有init_session、set_session、delete_session。

        3)不允許使用多重變量和變量函數(shù)。對(duì)模板的編譯,將使用一次性編譯,對(duì)多重變量和變量函數(shù)將不再進(jìn)行編譯轉(zhuǎn)化,從而有效地提高模板引擎的效率和降低黑客偽造函數(shù)的機(jī)率。

        4)禁止使用ftp相關(guān)函數(shù)。禁止通過執(zhí)行FTP函數(shù)來上傳及下載文件。并禁止創(chuàng)新新的對(duì)象,并給對(duì)象賦值,防止執(zhí)行危險(xiǎn)操作類,如解壓、打包文件。

        5)禁止使用以preg開頭的正則表達(dá)式匹配函數(shù)。禁止使用如preg_match函數(shù)進(jìn)行正則表達(dá)式匹配操作,防止黑客通過字符串拼接和替換的操作來構(gòu)造拼接成危險(xiǎn)操作函數(shù),如preg_replace('/xx/e','file_put'.'_contents("\$1")')。

        6)禁止調(diào)用文件函數(shù)。防止黑客對(duì)系統(tǒng)文件進(jìn)行篡改、復(fù)制、生成和刪除文件,同時(shí)防止讀入遠(yuǎn)程文件,主要的函數(shù)有opendir、readdir 、readdir 、file_get_contents 、file_put_contents、file、touch、tmpfile、chown、chgrp、chmod、rename、tempnam、fopen、fsockopen、fread、fgets、fclose、fputs、fwrite、unlink、rm、write_file、read_file、readfile、fopen、fsockopen、fread、fgets、fclose、fputs、fwrite、unlink、rm、write_file、read_file、readfile等。

        7)禁止引用其他文件。禁止在模板當(dāng)中使得include、include_once、require、require_once引用除了系統(tǒng)模板之外的模板或文件,防止引用惡意文件。

        8)除了以上危險(xiǎn)因素,其它主要的危險(xiǎn)函數(shù)操作有:getenv、eval、create_function、exec、system、passthru、pcntl_exec、phpinfo、define、dl、call_user_func、call_user_method、register_shutdown_function、register_tick_function、debug_backtrace、debug_print_backtrace、show_source、highlight_file、header、debug_zval_dump。

        3.自定義模板引擎實(shí)現(xiàn)

        對(duì)HTML模板,使用模板引擎進(jìn)行編譯,在編譯過程中,對(duì)HTML模板使用preg_match_all進(jìn)行全局正則表達(dá)式匹配,以檢測(cè)模板當(dāng)中是否包含危險(xiǎn)函數(shù),如果匹配到相關(guān)的危險(xiǎn)函數(shù),則進(jìn)行報(bào)錯(cuò)輸出,并將錯(cuò)誤輸出到PHP模板當(dāng)中,從而達(dá)到安全提示和防護(hù)的作用,實(shí)現(xiàn)的關(guān)鍵代碼如下:

        /*

        $d_func 定義危險(xiǎn)函數(shù)集

        */

        $d_func =

        //變量函數(shù)不允許使用

        '\$[^\(\)\{\}\|\?\.\/\*\s<;=,&!%]+|'.

        //危險(xiǎn)函數(shù)也不允許使用

        'eval|create_function|exec|system|passthru|pcntl_exec|phpinfo|define|dl|call_user_func|call_user_method|register_shutdown_function|register_tick_function|debug_backtrace|debug_print_backtrace|show_source|highlight_file|init_session|set_session|delete_session|header|debug_zval_dump|'.

        //禁止使用mysql,ftp相關(guān)函數(shù)

        'mysql\w+|ftp_\w+|'.

        //禁止使用preg開頭的函數(shù)

        'preg_replace|preg_replace_callback|preg_filter|'.

        //禁止調(diào)用文件函數(shù)

        'opendir|readdir|rmdir|file_get_contents|file_put_contents|file|touch|tmpfile|chown|chgrp|chmod|rename|tempnam|fopen|fsockopen|fread|fgets|fclose|fputs|fwrite|unlink|rm|write_file|read_file|readfile';

        /*

        $template_safe定義安全過濾數(shù)組

        */

        $template_safe = array(

        'db' => '/(DB_master|DB_slave)/i', //不允許直接操作數(shù)據(jù)庫(kù)

        'ref' => '/(=|\(|,)\s*&\s*\$/i', //禁止引用賦值

        'session' => '/(ETSESSION|_ETSESSION)/i', //不允許改session

        'vvar' => '/\$[\s\{\$]/i', //禁止多重變量

        'function' => '/('.$d_func .')\s*\([\s\S]*?\)/i', //危險(xiǎn)函數(shù)

        'obj' => '/(?:new|clone)\s+\$*'.$var .'/i', //不允許創(chuàng)建新對(duì)象

        'assign' => '/\$[a-zA-Z_\x7f-\xff][^-\$]*?->[^=;\(\)\{\}]+?=/i', //禁止給對(duì)象賦值

        'include' => '/(include_once|require_once|include|require)(?![a-zA-Z0-9_]+|\s+template\()/i'

        //禁止通過系統(tǒng)定義的include template()之外的include引用模板

        );

        /*

        用foreach進(jìn)行遍歷,preg_match_all進(jìn)行正則匹配,檢測(cè)模板當(dāng)中的危險(xiǎn)函數(shù)

        */

        foreach($template_safe as $k => $v){

        $s = '';

        if(preg_match_all($v,$t,$m)){

        foreach($m[1] as $i => $func){

        $s = $m[0][$i];

        break;

        }

        }

        }

        4.結(jié)論

        對(duì)PHP編譯型模板,本文嘗試從HTML模板及編譯過程出發(fā),總結(jié)歸類出針對(duì)模板引擎的危險(xiǎn)操作函數(shù),在編譯過程中,通過正則匹配過濾危險(xiǎn)函數(shù),保證了編譯型模板引擎的安全,從而降低黑客從模板引擎攻擊網(wǎng)站的成功率,達(dá)到預(yù)期的效果。

        參考文獻(xiàn)

        [1]劉佳,盧顯良.小型高效模板引擎的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2006,23(4):222-224.

        [2]屈建明,陳潔.FreeMarker模板引擎動(dòng)態(tài)生成網(wǎng)頁(yè)的應(yīng)用研究[J].計(jì)算機(jī)與現(xiàn)代化,2011(003):121-123.

        [3]流年.ThinkTempIate模板引擎的設(shè)計(jì)[J].軟件世界,2007(11):44-45.

        [4]姬一文,吳慶波,楊沙洲.一種服務(wù)器端模板引擎的改進(jìn)與實(shí)現(xiàn)倡[J].計(jì)算機(jī)應(yīng)用研究,2011,28(3).

        [5]南軼,李先國(guó).模板技術(shù)在內(nèi)容管理系統(tǒng)中的研究與應(yīng)用[J].微電子學(xué)與計(jì)算機(jī),2012, 29(006):180-184.

        [6]徐杰.PHP編譯型模板的設(shè)計(jì)與實(shí)現(xiàn)[J].信息系統(tǒng)工程,2012(4):38-39.

        猜你喜歡
        引擎黑客危險(xiǎn)
        歡樂英雄
        多少個(gè)屁能把布克崩起來?
        網(wǎng)絡(luò)黑客比核武器更可怕
        喝水也會(huì)有危險(xiǎn)
        藍(lán)谷: “涉藍(lán)”新引擎
        商周刊(2017年22期)2017-11-09 05:08:31
        擁擠的危險(xiǎn)(三)
        新少年(2015年6期)2015-06-16 10:28:21
        無形的引擎
        河南電力(2015年5期)2015-06-08 06:01:46
        基于Cocos2d引擎的PuzzleGame開發(fā)
        話“危險(xiǎn)”
        海外英語(2013年11期)2014-02-11 03:21:02
        One?。牛睿纾椋睿濉。蹋澹妫糁皇O乱粋€(gè)引擎
        久久一区二区国产精品| 一本色道久久综合亚洲精品小说| 99久久精品一区二区三区蜜臀 | 曰韩人妻无码一区二区三区综合部| 亚洲AV色无码乱码在线观看| 国产人妖xxxx做受视频| 永久免费观看的黄网站在线| 日本a片大尺度高潮无码| 久久伊人色av天堂九九| 免费看欧美日韩一区二区三区| 东京热日本道免费高清| 国产麻花豆剧传媒精品mv在线| 国产在视频线精品视频| 无码日日模日日碰夜夜爽| av网站一区二区三区| 欧美老妇牲交videos| 亚洲av综合日韩| 亚洲黄色在线看| 五月婷婷丁香视频在线观看| 久久久亚洲欧洲日产国码二区| 香蕉久久福利院| 久久青草国产精品一区| 久久久国产精品首页免费| 内射中出日韩无国产剧情| 亚洲一区精品无码色成人| 小13箩利洗澡无码免费视频| 国产精品亚洲一区二区三区在线看 | 国产aⅴ无码专区亚洲av麻豆 | 最新国产成人在线网站| 亚洲女同性恋第二区av| 无码人妻一区二区三区在线| 欧美黑人巨大xxxxx| 久久久久无码中文字幕| 国产一区二区三区我不卡 | 精品国内日本一区二区| 日韩成人无码| 久久国产精品老女人| 久久国产精品亚洲我射av大全| 亚洲亚洲人成综合丝袜图片| 久久精品国产亚洲av电影| 亚洲中文字幕人妻诱惑|