PHP安全-安全模式
PHP的safe_mode選項(xiàng)的目的是為了解決本章所述的某些問題。但是,在PHP層面上去解決這類問題從架構(gòu)上來看是不正確的,正如PHP手冊所述(http://php.net/features.safe-mode)。
當(dāng)安全模式生效時(shí),PHP會(huì)對正在執(zhí)行的腳本所讀取(或所操作)文件的屬主進(jìn)行檢查,以保證與該腳本的屬主是相同的。雖然這樣確實(shí)可以防范本章中的很多例子,但它不會(huì)影響其它語言編寫的程序。例如,使用Bash寫的CGI腳本:
#!/bin/bash
echo 'Content-Type: text/plain'
echo ''
cat /home/victim/inc/db.inc
Bash解析器會(huì)去關(guān)心甚至檢查PHP配置文件中的打開安全模式的配置字符串嗎?當(dāng)然不會(huì)。同樣的,該服務(wù)器支持的其它語言,如Perl,Python等都不會(huì)去關(guān)心這個(gè)。 本章中的所有例子可以很簡單地被改編成其它編程語言。
另一個(gè)典型的問題是安全模式不會(huì)拒絕屬于WEB服務(wù)器文件的訪問。這是由于一段腳本可以用于建立另一段腳本,而新腳本是屬于WEB服務(wù)器的,因此它可以訪問所有屬于WEB服務(wù)器的文件:
<?php
$filename = ’file.php’;
$script = ’<?php
header(’Content-Type: text/plain’);
readfile($_GET[’file’]);
?>’;
file_put_contents($filename, $script);
?>
上面的腳本建立了下面的文件:
<?php
header(’Content-Type: text/plain’);
readfile($_GET[’file’]);
?>
由于該文件是由Web服務(wù)器所建立的,因此它的屬主是Web服務(wù)器(Apache一般以nobody用戶運(yùn)行):
$ ls file.php
-rw-r--r-- 1 nobody nobody 72 May 21 12:34 file.php
因此,這個(gè)腳本可以繞過很多安全模式所提供的安全措施。即使打開了安全模式,攻擊者也能顯示一些信息如保存在/tmp目錄內(nèi)的會(huì)話信息,這是由于這些文件是屬于Web服務(wù)器的(nobody)。
PHP的安全模式確實(shí)起到了一些作用,可以認(rèn)為它是一種深度防范機(jī)制。可是,它只提供了可憐的保護(hù),同時(shí)在本章中也沒有其它安全措施來替代它。
相關(guān)文章:
1. .Net加密神器Eazfuscator.NET?2023.2?最新版使用教程2. jsp文件下載功能實(shí)現(xiàn)代碼3. 如何在jsp界面中插入圖片4. ASP動(dòng)態(tài)網(wǎng)頁制作技術(shù)經(jīng)驗(yàn)分享5. 詳解瀏覽器的緩存機(jī)制6. .Net Core和RabbitMQ限制循環(huán)消費(fèi)的方法7. Xml簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理8. phpstudy apache開啟ssi使用詳解9. jsp實(shí)現(xiàn)登錄驗(yàn)證的過濾器10. JSP之表單提交get和post的區(qū)別詳解及實(shí)例
