国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php打開遠程文件的方法和風險及解決方法

2024-05-04 23:19:33
字體:
來源:轉載
供稿:網友
PHP有一個配置選項叫allow_url_fopen,該選項默認是有效的。它允許你指向許多類型的資源,并像本地文件一樣處理。例如,通過讀取URL你可以取得某一個頁面的內容(HTML),看下面的代碼

復制代碼 代碼如下:


<?php
$contents = file_get_contents('http://www.survivalescaperooms.com/');
?>


當被污染數據用于include和require的文件指向時,會產生嚴重漏洞。實際上,我認為這種漏洞是PHP應用中最危險的漏洞之一,這是因為它允許攻擊者執行任意代碼。盡管嚴重性在級別上要差一點,但在一個標準文件系統函數中使用了被污染數據的話,會有類似的漏洞產生:

復制代碼 代碼如下:


<?php
$contents = file_get_contents($_GET['filename']);
?>


該例使用戶能操縱file_get_contents( )的行為,以使它獲取遠程資源的內容。考慮一下類似下面的請求:
?file ... mple.org%2Fxss.html
這就導致了$content的值被污染的情形,由于這個值是通過間接方式得到的,因此很可能會忽視這個事實。這也是深度防范原則會視文件系統為遠程的數據源,同時會視$content的值為輸入,這樣你的過濾機制會潛在的起到扭轉乾坤的作用。
由于$content值是被污染的,它可能導致多種安全漏洞,包括跨站腳本漏洞和SQL注入漏洞。例如,下面是跨站腳本漏洞的示例:

復制代碼 代碼如下:


<?php
$contents = file_get_contents($_GET['filename']);
echo $contents;
?>


解決方案是永遠不要用被污染的數據去指向一個文件名。要堅持過濾輸入,同時確信在數據指向一個文件名之前被過濾即可:

復制代碼 代碼如下:


<?php
$clean = array();
/* Filter Input ($_GET['filename']) */
$contents = file_get_contents($clean['filename']);
?>


盡管無法保證$content中的數據完全沒有問題,但這還是給出了一個合理的保證,即你讀取的文件正是你想要讀取的文件,而不是由攻擊者指定的。為加強這個流程的安全性,你同樣需要把$content看成是輸入,并在使用前對它進行過濾。

復制代碼 代碼如下:


<?php
$clean = array();
$html = array();
/* Filter Input ($_GET['filename']) */
$contents = file_get_contents($clean['filename']);
/* Filter Input ($contents) */
$html['contents'] = htmlentities($clean['contents'], ENT_QUOTES, 'UTF-8');
echo $html['contents'];
?>


上面的流程提供了防范多種攻擊的強有力的方法,同時在實際編程中推薦使用。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长阳| 霍城县| 贵溪市| 尚义县| 太谷县| 桓台县| 浑源县| 广水市| 广汉市| 易门县| 邳州市| 黄浦区| 夏邑县| 潞西市| 乌兰察布市| 枣强县| 青川县| 易门县| 富民县| 秦安县| 板桥市| 张家港市| 嘉祥县| 凤阳县| 和顺县| 东方市| 清涧县| 德保县| 昌江| 福安市| 从江县| 定襄县| 鲁山县| 弥勒县| 板桥市| 英吉沙县| 米脂县| 崇礼县| 保康县| 太和县| 香格里拉县|