最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP編程函數(shù)安全篇

 更新時(shí)間:2013年01月08日 15:01:31   作者:  
關(guān)于腳本安全這個(gè)話題好像永遠(yuǎn)沒完沒了,如果你經(jīng)常到國外的各種各樣的bugtraq上,你會發(fā)現(xiàn)有一半以上都和腳本相關(guān),諸如SQL injection,XSS,Path Disclosure,Remote commands execution這樣的字眼比比皆是,我們看了之后的用途難道僅僅是抓肉雞?
對于我們想做web安全的人來說,最好就是拿來學(xué)習(xí),可是萬物抓根源,我們要的不是魚而是漁。在國內(nèi),各種各樣的php程序1.0版,2.0版像雨后春筍一樣的冒出來,可是,大家關(guān)注的都是一些著名的cms,論壇,blog程序,很少的人在對那些不出名的程序做安全檢測,對于越來越多的php程序員和站長來說,除了依靠服務(wù)器的堡壘設(shè)置外,php程序本身的安全多少你總得懂點(diǎn)吧。
有人說你們做php安全無非就是搞搞注入和跨站什么什么的,大錯(cuò)特錯(cuò),如果這樣的話,一個(gè)magic_quotes_gpc或者服務(wù)器里的一些安全設(shè)置就讓我們?nèi)珱]活路了:(。我今天要說的不是注入,不是跨站,而是存在于php程序中的一些安全細(xì)節(jié)問題。OK!切入正題。
注意一些函數(shù)的過濾
有些函數(shù)在程序中是經(jīng)常使用的,像include(),require(),fopen(),fwrite(),readfile(),unlink(),eval()以及它們的變體函數(shù)等等。這些函數(shù)都很實(shí)用,實(shí)用并不代表讓你多省心,你還得為它們多費(fèi)點(diǎn)心。 :)
1.include(),require()和fopen(),include_once(),require_once()這些都可以遠(yuǎn)程調(diào)用文件,對于它們的危害,google搜一下你就會很明了,對于所包含調(diào)用的變量沒過濾好,就可以任意包含文件從而去執(zhí)行。舉個(gè)例子,看print.php

if (empty ($bn) ) { //檢查是變量$bn是否為空
include (“$cfg_dir/site_${site}.php”); //把$cfg_dir這個(gè)路徑里的site_${site}.php包含進(jìn)來

不管存不存在$cfg_dir目錄,$site這個(gè)變量你可以很自然的去使用,因?yàn)樗緵]檢查$site變量啊。可以把變量$site指定遠(yuǎn)程文件去調(diào)用,也可以是本地的一個(gè)文件,你所指定的文件里寫上php的語句,然后它就去包含執(zhí)行這個(gè)含有php語句的文件了.就像這樣
列出文件目錄甚至可以擴(kuò)展到包含一些管理員文件,提升權(quán)限,典型的像以前phpwind,bo-blog的漏洞一樣。除了依靠php.ini里的allow_url_fopen設(shè)為off禁止遠(yuǎn)程使用文件和open_base_dir禁止使用目錄以外的文件外,你還得事先聲明好只能包含哪些文件,這里就不多說廢話了。
2.fopen(),file(),readfile(),openfile(),等也是該特別留意的地方。函數(shù)本身并沒什么,它們的作用是去打開文件,可是如果對變量過濾不徹底的話,就會泄露源代碼。這樣的函數(shù)文本論壇里會有很多。

$articlearray=openfile(“$dbpath/$fid/$tid.php”); //打開$dbpath/$fid這個(gè)路徑的$tid.php文件
$topic_detail=explode(“|”,$articlearray[0]); //用分割符|讀出帖子的內(nèi)容

很眼熟吧,這是ofstar以前版本的read.php,$fid和$tid沒有任何過濾,$tid指定為某個(gè)文件提交,就發(fā)生了原代碼泄露。就像這樣。

$tid會被加上php的后綴,所以直接寫index。這僅僅是個(gè)例子,接著看吧。
3.fwrite()和它的變體函數(shù)這種漏洞想想都想得出,對于用戶提交的字符沒過濾的話,寫入一段php后門又不是不可以。
4.unlink()函數(shù),前段時(shí)間,phpwind里任意刪除文件就是利用這個(gè)函數(shù),對于判斷是否刪除的變量沒過濾,變量可以指定為任意文件,當(dāng)然就可以刪除任意文件的變量。
5.eval(),preg_replace()函數(shù),它們的作用是執(zhí)行php代碼,如果字符串沒被經(jīng)過任何過濾的話,會發(fā)生什么呢,我就??匆娨恍ヽms里面使用,想想,一句話的php木馬不就是根據(jù)eval()原理制作的嗎?
6.對于system()這些系統(tǒng)函數(shù),你會說在php.ini里禁止系統(tǒng)函數(shù),對,這也是好辦法,可是象一些程序里需要,那是不是就不用了呢?就像上次我看到的一套很漂亮的php相冊一樣。另外對于popen(),proc_open(),proc_close()函數(shù)你也得特別注意,盡管他們執(zhí)行命令后并沒有直接的輸出,但你想這到底對黑客們有沒有用呢。再這里php提供提供了兩個(gè)函數(shù),escapeshellarg(),escapeshellcmd(),這兩個(gè)函數(shù)用來對抗系統(tǒng)函數(shù)的調(diào)用攻擊,也就是過濾。
對于危害,來舉個(gè)例子,我們來看某論壇prod.php
07 $doubleApp = isset($argv[1]); //初始化變量$doubleApp

14 if( $doubleApp ) //if語句
15 {
16 $appDir = $argv[1]; //初始化$appDir
17 system(“mkdir $prodDir/$appDir”); //使用系統(tǒng)函數(shù)system來創(chuàng)建目錄$prodDir/$appDir

本來是拿來創(chuàng)建$prodDir/$appDir目錄的,再接著看上去,程序僅僅檢測是否存在$argv[1],缺少對$argv[1]的必要過濾,那么你就可以這樣
/prod.php?argv[1]=|ls%20-la或者/prod.php?argv[1]=|cat%20/etc/passwd
(分割符| 在這里是UNIX的管道參數(shù),可以執(zhí)行多條命令。)
到這里,常見的漏洞類型應(yīng)該知道點(diǎn)了吧。

所以一定不要只指望服務(wù)器端的設(shè)置,最好后臺程序也需要注意下,一般情況下通過服務(wù)器針對某個(gè)站點(diǎn)設(shè)置應(yīng)該能好點(diǎn)。但很多與數(shù)據(jù)庫的操作等就不是這么容易控制了。

相關(guān)文章

  • PHP繞過open_basedir限制操作文件的方法

    PHP繞過open_basedir限制操作文件的方法

    本篇文章給大家分享了PHP繞過open_basedir限制操作文件的三種方法以及相關(guān)技巧,有興趣的朋友參考學(xué)習(xí)下。
    2018-06-06
  • PHP執(zhí)行普通shell命令流程解析

    PHP執(zhí)行普通shell命令流程解析

    這篇文章主要介紹了PHP執(zhí)行普通shell命令流程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 一個(gè)MYSQL操作類

    一個(gè)MYSQL操作類

    一個(gè)MYSQL操作類...
    2006-11-11
  • PHP基于cookie實(shí)現(xiàn)統(tǒng)計(jì)在線人數(shù)功能示例

    PHP基于cookie實(shí)現(xiàn)統(tǒng)計(jì)在線人數(shù)功能示例

    這篇文章主要介紹了PHP基于cookie實(shí)現(xiàn)統(tǒng)計(jì)在線人數(shù)功能,涉及php文件讀寫、cookie訪問、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • php自定義分頁類完整實(shí)例

    php自定義分頁類完整實(shí)例

    這篇文章主要介紹了php自定義分頁類,以完整實(shí)例形式分析了php實(shí)現(xiàn)分頁功能的原理與具體實(shí)現(xiàn)技巧,代碼中有詳細(xì)的注釋便于理解,需要的朋友可以參考下
    2015-12-12
  • php使用socket post數(shù)據(jù)到其它web服務(wù)器的方法

    php使用socket post數(shù)據(jù)到其它web服務(wù)器的方法

    這篇文章主要介紹了php使用socket post數(shù)據(jù)到其它web服務(wù)器的方法,涉及php使用socket傳輸數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • PHP設(shè)計(jì)模式之 策略模式Strategy詳解【對象行為型】

    PHP設(shè)計(jì)模式之 策略模式Strategy詳解【對象行為型】

    這篇文章主要介紹了PHP設(shè)計(jì)模式之 策略模式Strategy,結(jié)合實(shí)例形式詳細(xì)分析了PHP基于對象行為型的策略模式Strategy具體原理、實(shí)現(xiàn)技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • php基于DOMDocument操作頁面元素實(shí)例

    php基于DOMDocument操作頁面元素實(shí)例

    這篇文章主要介紹了php基于DOMDocument操作頁面元素,結(jié)合實(shí)例形式分析了php使用DOMDocument進(jìn)行頁面元素獲取與屬性修改的相關(guān)操作技巧,需要的朋友可以參考下
    2023-06-06
  • php操作access數(shù)據(jù)庫的方法詳解

    php操作access數(shù)據(jù)庫的方法詳解

    這篇文章主要介紹了php操作access數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式詳細(xì)分析了php基于ADOdb、PDO及ODBC等方式連接與操作access數(shù)據(jù)庫的具體實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-02-02
  • PHP中session跨子域的三種實(shí)現(xiàn)方法

    PHP中session跨子域的三種實(shí)現(xiàn)方法

    做項(xiàng)目的時(shí)候跨域問題在cooike及session中我們經(jīng)常會使用到了,不過php對于子域處理是比較簡單的了,小編整理了三個(gè)解決方案,下面一起來看看。
    2016-07-07

最新評論

吉首市| 鄂尔多斯市| 霍城县| 浦东新区| 广元市| 兴隆县| 哈巴河县| 若羌县| 勃利县| 大冶市| 甘肃省| 屏东县| 鹿泉市| 华池县| 岳普湖县| 上林县| 会东县| 波密县| 香河县| 大港区| 永登县| 南丰县| 淅川县| 潮安县| 枣庄市| 新野县| 甘南县| 资兴市| 武清区| 南陵县| 博野县| 安阳县| 红桥区| 建瓯市| 仁怀市| 鄂托克旗| 高邮市| 马龙县| 河北省| 九台市| 孝感市|