亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP如何實現編程函數安全

發布時間:2021-10-14 15:26:04 來源:億速云 閱讀:119 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關PHP如何實現編程函數安全的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。


注意一些函數的過濾
有些函數在程序中是經常使用的,像include(),require(),fopen(),fwrite(),readfile(),unlink(),eval()以及它們的變體函數等等。這些函數都很實用,實用并不代表讓你多省心,你還得為它們多費點心。 :)
1.include(),require()和fopen(),include_once(),require_once()這些都可以遠程調用文件,對于它們的危害,google搜一下你就會很明了,對于所包含調用的變量沒過濾好,就可以任意包含文件從而去執行。舉個例子,看print.php

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

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

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

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

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

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

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

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

感謝各位的閱讀!關于“PHP如何實現編程函數安全”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

河池市| 赫章县| 沙坪坝区| 共和县| 蒙城县| 奉新县| 都匀市| 玛多县| 英吉沙县| 孟村| 沾益县| 西乡县| 淄博市| 巴彦县| 黄龙县| 上栗县| 长子县| 浪卡子县| 民权县| 中超| 溆浦县| 曲松县| 玉田县| 安国市| 龙井市| 囊谦县| 冕宁县| 东城区| 长丰县| 东安县| 吉安县| 新安县| 鄄城县| 巴彦县| 准格尔旗| 龙游县| 邵东县| 林周县| 波密县| 九寨沟县| 德兴市|