|
satan32
|
 |
« 於: 2008-07-16 18:41 » |
|
請問,
我製作了一個網站 他有個後台會做一些上稿動作 並且更新某些頁面 但我又需要限定權限 目前整個目錄我都是開777 但我想要針對 除了upload的以外 其他都開成類似775或是755權限 (目前使用者:群組 是 root:wheel) 請問有什麼辦法做到 讓她除了後檯上稿動作可以更新頁面 又可以鎖定權限??
|
|
|
|
|
已記錄
|
|
|
|
|
yamaka
|
 |
« 回覆文章 #1 於: 2008-07-16 18:58 » |
|
老實說...看不懂你的問題在哪裡  上稿?? 上傳檔案嗎? 如果是用 php 要上傳檔案, 跟你說的權限沒啥關係啊.. 只要上傳後能寫入硬碟就好. 還是 ftp 上傳, 那跟 php 無關嚕~~
|
|
|
|
|
已記錄
|
|
|
|
|
satan32
|
 |
« 回覆文章 #2 於: 2008-07-16 19:05 » |
|
老實說...看不懂你的問題在哪裡  上稿?? 上傳檔案嗎? 如果是用 php 要上傳檔案, 跟你說的權限沒啥關係啊.. 只要上傳後能寫入硬碟就好. 還是 ftp 上傳, 那跟 php 無關嚕~~ .... 是這樣的 主要的頁面 都是生成html 靜態的頁面 不是動態 竟量避免sql loading 所以 製作一個後台去做發布消息上稿的動作 送出後 程式會去執行生成這些html 例如index等頁面 那勢必會更新到那些頁面 php後台登入後上稿 送出執行都適用www身分去做 但是我們又必須鎖定檔案的權限 (避免遭到入侵)
|
|
|
|
|
已記錄
|
|
|
|
|
hoyo
|
 |
« 回覆文章 #3 於: 2008-07-16 20:42 » |
|
把檔案上傳到網站目錄之外, 這樣就可以維持你所謂的安全 755 權限, 又可以避免被直接讀取檔案。
|
|
|
|
|
已記錄
|
 線上測驗平台受人與魚,不如授人與漁 上海自來水來自海上;倫敦好奇人奇好敦倫
|
|
|
|
micmic3
|
 |
« 回覆文章 #4 於: 2008-07-17 09:27 » |
|
把檔案上傳到網站目錄之外, 這樣就可以維持你所謂的安全 755 權限, 又可以避免被直接讀取檔案。
說到這個...當檔案在網站目錄之外, php 可以 include 嗎?apache 可以讀的到嗎?要怎麼做啊... -- 這個部份因為長期在虛擬主機上做事,虛擬主機很多東西都不能改 所以想知道(把檔案上傳到網站目錄之外)這部份要怎麼做...不然給個 key word 吧 
|
|
|
|
|
已記錄
|
|
|
|
|
hoyo
|
 |
« 回覆文章 #5 於: 2008-07-17 09:41 » |
|
說到這個...當檔案在網站目錄之外, php 可以 include 嗎?apache 可以讀的到嗎?要怎麼做啊... -- 這個部份因為長期在虛擬主機上做事,虛擬主機很多東西都不能改 所以想知道(把檔案上傳到網站目錄之外)這部份要怎麼做...不然給個 key word 吧  上傳到其他目錄應該不是大問題 move_uploaded_file(), exec()+mv .... 都可以達到目的,只要目錄權限可以讓 www 讀取、寫入 問題是怎麼讀取? include() 很簡單,因為 include 可以指定「絕對路徑」, <?php include( 'a.php' ); // 相對路徑 include( '../bbb/a.php' ); // 相對路徑 include( '/var/www/aaa/a.php' ); // 絕對路徑 ?> 問題是如果需要「直接」讀取時,該怎麼辦? 所以必須寫一隻程式來「控制讀取」, 大概就長得像這樣子: <?php $fd = fopen( 'c:/eis_file/document_'.$sid, "rb");
header("Content-Type: ".$type ); header("Content-Length: ".$size ); if ( $mode == 'download' ) header('Content-Disposition: attachment; filename="'.$name.'"');
sleep(1);
ob_flush(); flush();
while(!feof($fd)) {
$buffer = fread($fd, 4096); print $buffer; }
fclose ($fd); ?>
我有很多系統都使用這套概念, 起因是因為我需要控制讀取,可是資料庫「塞」不進去 (有興趣可以爬爬文) 這段 code 是從 www.php.net 抄來的,他的重點是 sleep(1); ob_flush(); flush();
這三行,如果你嚐試過你就會知道我想說什麼了
|
|
|
|
« 最後編輯時間: 2008-07-17 09:44 由 hoyo »
|
已記錄
|
 線上測驗平台受人與魚,不如授人與漁 上海自來水來自海上;倫敦好奇人奇好敦倫
|
|
|
|
yamaka
|
 |
« 回覆文章 #6 於: 2008-07-17 09:54 » |
|
如果我沒會錯意的話, 樓主的目的是要在產生出 html 檔之後
鎖住這些 html 檔的權限, 避免被入侵修改這些檔案內容
如果其他目錄 www 身分也都能讀寫的話, 那似乎就無效了...
建議樓主先將你的網站環境說明一下
例如:
是用虛擬主機, 還是獨立主機, 作業系統又是何種,
你能控制的權限又能到何程度??
|
|
|
|
|
已記錄
|
|
|
|
|
hoyo
|
 |
« 回覆文章 #7 於: 2008-07-17 09:57 » |
|
其實我根本不在意「被入侵修改」的問題, 因為入侵後絕對不是拿到 www 的權限 (誰不是以 root 為目標?) 所以這個需求基本上「我覺得」很無趣... 有了 root 權限,有什麼不能改的?
|
|
|
|
|
已記錄
|
 線上測驗平台受人與魚,不如授人與漁 上海自來水來自海上;倫敦好奇人奇好敦倫
|
|
|
|
micmic3
|
 |
« 回覆文章 #8 於: 2008-07-17 10:51 » |
|
<?php header('Content-Disposition: attachment; filename="'.$name.'"'); ?>
不過如果是樓主的 html 要能夠被瀏覽的話 header 要改一下 -- 其實我的想法大概也是這樣,不過還沒實做... 有人做完分享真不錯  謝啦! 不過這部份主要是不要讓別人直接看到你的 php ,或是檔案 跟入侵 比較沒關係... 就像 hoyo 說的...都被入侵了...要的當然是 root啊
|
|
|
|
|
已記錄
|
|
|
|
|
satan32
|
 |
« 回覆文章 #9 於: 2008-07-17 11:58 » |
|
把檔案上傳到網站目錄之外, 這樣就可以維持你所謂的安全 755 權限, 又可以避免被直接讀取檔案。
痾... 我問的根檔案上傳沒有關係..
|
|
|
|
|
已記錄
|
|
|
|
|
ricky
|
 |
« 回覆文章 #10 於: 2008-07-17 12:13 » |
|
可是我看到很多被攻破的原因都是 目錄權限開成777 攻擊手法不外乎 有些人寫的程式允許上傳檔案(翩翩就是沒對php作過濾,或者是把html的檔案也設為php去處理) 攻擊者接著就把檔案上傳上去(故意上傳一個php) 遠端直接執行這個php,利用這個php就可以做出一個簡單的shell (包含執行,檔案的複製存取) 然後再來慢慢的翻整個檔案目錄,找出mysql的密碼 接著就不用說了,看是要mysql清光光還是值入一個程式作廣告信的大跳板嘍,反正目錄都可以存取,有啥作不到的呢?
|
|
|
|
|
已記錄
|
|
|
|
|
hoyo
|
 |
« 回覆文章 #11 於: 2008-07-17 12:27 » |
|
可是我看到很多被攻破的原因都是 目錄權限開成777 攻擊手法不外乎 有些人寫的程式允許上傳檔案(翩翩就是沒對php作過濾,或者是把html的檔案也設為php去處理) 攻擊者接著就把檔案上傳上去(故意上傳一個php) 遠端直接執行這個php,利用這個php就可以做出一個簡單的shell (包含執行,檔案的複製存取) 然後再來慢慢的翻整個檔案目錄,找出mysql的密碼 接著就不用說了,看是要mysql清光光還是值入一個程式作廣告信的大跳板嘍,反正目錄都可以存取,有啥作不到的呢?
只對「可以直接使用 Apache 讀取檔案」才有用吧 把檔案放在網站根目錄之外就沒用了,對吧?
|
|
|
|
« 最後編輯時間: 2008-07-17 12:32 由 hoyo »
|
已記錄
|
 線上測驗平台受人與魚,不如授人與漁 上海自來水來自海上;倫敦好奇人奇好敦倫
|
|
|
|
yamaka
|
 |
« 回覆文章 #12 於: 2008-07-17 13:20 » |
|
所以我建議樓主說明清楚 web 系統環境
這樣討論才有用啊~~
|
|
|
|
|
已記錄
|
|
|
|
|
hoyo
|
 |
« 回覆文章 #13 於: 2008-07-17 13:26 » |
|
把檔案上傳到網站目錄之外, 這樣就可以維持你所謂的安全 755 權限, 又可以避免被直接讀取檔案。
痾... 我問的根檔案上傳沒有關係.. 沒關係沒有關係 @@ 你問你的,我們討論我們的 
|
|
|
|
|
已記錄
|
 線上測驗平台受人與魚,不如授人與漁 上海自來水來自海上;倫敦好奇人奇好敦倫
|
|
|
|
Darkhero
|
 |
« 回覆文章 #14 於: 2008-07-17 15:54 » |
|
沒關係沒有關係 @@ 你問你的,我們討論我們的  怎麼有離題還可以離的這麼認真的..T_T...
|
|
|
|
|
已記錄
|
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯. 『灌水才是重點,發文只是順便』 『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
|
|
|
|
ricky
|
 |
« 回覆文章 #15 於: 2008-07-18 09:34 » |
|
只對「可以直接使用 Apache 讀取檔案」才有用吧 把檔案放在網站根目錄之外就沒用了,對吧?
是沒錯... 可是看過不少會把整個目錄都設為777為了方便上傳圖片 後台直接上傳檔案或是html 上傳的檔案apache就可以直接存取 這是我看過某個知名親子網站的RD弄出來的(看的快吐血了) 這還不打緊他還乾脆把web目錄的owner直接改成apache
|
|
|
|
|
已記錄
|
|
|
|
|
satan32
|
 |
« 回覆文章 #16 於: 2008-07-18 14:39 » |
|
把檔案上傳到網站目錄之外, 這樣就可以維持你所謂的安全 755 權限, 又可以避免被直接讀取檔案。
痾... 我問的根檔案上傳沒有關係.. 痾... 那當我沒問 你們討論你們的吧  沒關係沒有關係 @@ 你問你的,我們討論我們的 
|
|
|
|
|
已記錄
|
|
|
|
|
廉價勞工
|
 |
« 回覆文章 #17 於: 2008-07-18 15:28 » |
|
我會的比較少 只想到用
1,ACL 2,sudo
不知道可不可行...
|
|
|
|
|
已記錄
|
錢少、事多、離家遠… 位低、權輕、責任重…
|
|
|
|
appleboy
|
 |
« 回覆文章 #18 於: 2008-07-28 14:15 » |
|
[恕刪] <?php $fd = fopen( 'c:/eis_file/document_'.$sid, "rb");
header("Content-Type: ".$type ); header("Content-Length: ".$size ); if ( $mode == 'download' ) header('Content-Disposition: attachment; filename="'.$name.'"');
sleep(1);
ob_flush(); flush();
while(!feof($fd)) {
$buffer = fread($fd, 4096); print $buffer; }
fclose ($fd); ?>
我有很多系統都使用這套概念, 起因是因為我需要控制讀取,可是資料庫「塞」不進去 (有興趣可以爬爬文) 這段 code 是從 www.php.net 抄來的,他的重點是 sleep(1); ob_flush(); flush();
這三行,如果你嚐試過你就會知道我想說什麼了 我問一下這個,我去執行一下,好像沒有特殊效果 sleep(1);
ob_flush(); flush(); 這邊在這隻程式裡面是做什麼用的? 緩衝輸出? 我底下有實際跑一個例子: <?php
ob_flush(); echo "這是第一行<br />"; flush(); sleep(2);
for ($i=10; $i>0; $i--) { echo $i . "<br />"; ob_flush(); flush(); sleep(1); } ob_end_flush(); ?> 因為我測試妳那段 code,拿掉那一段跟沒拿掉效果一樣? http://blog.wu-boy.com/2008/07/28/303/
|
|
|
|
|
已記錄
|
|
|
|
|
micmic3
|
 |
« 回覆文章 #19 於: 2008-07-29 09:36 » |
|
如果一般情況 <?php sleep(5); #睡久一點 phpinfo(); ?>
會停 5 秒 才會跑出資料 <?php ob_start(); phpinfo(); ob_flush(); sleep(5); #睡久一點 echo ' weak up';
?>
這不一樣會些吐等 5 秒再 echo
|
|
|
|
|
已記錄
|
|
|
|
|
ricky
|
 |
« 回覆文章 #20 於: 2008-07-29 11:46 » |
|
ob_flush(); flush(); 用途主要是清空輸出緩衝區 主要的原因如下 HTTP 1.0的協定中,文件的本文輸出之前 web server可以在header中預先指定文件的長度 讓瀏覽器可以預先知道整個文件的長度,顯示下載的進度 但是php的內容是根據程式執行的結果去作輸出(簡單的說就是你無法預知程式會輸出多少byte的資料) 所以php採用了輸出緩衝的機制 將輸出的資料預先丟到緩衝區(這樣php只要統計緩衝區裡的資料長度,再一次吐出) 這樣就可以在瀏覽器取得完整文件之前預先知道文件的長度了 可是遇到大檔案時,這就是個討厭的東西 想想每個檔案都得先丟到緩衝區,統計好長度然後再輸出,這是很沒效率的 要是檔案長度超過緩衝區的上限時 還得將檔案切成好幾部份輸出,這就得動用HTTP 1.1的multi part協定,相容性會有問題(squid對HTTP 1.1支援還在實驗階段) 所以嘍 為了一勞永逸 乾脆把輸出緩衝關閉比較省事些,缺點就是你沒辦法得知檔案的下載進度了。 原本的 ob_flush(); flush(); 只是將輸出緩衝區清空(作用是不啟用輸出長度的計數) 資料還是會先丟到緩衝區再輸出 比較乾脆的作法還是 直接呼叫 ob_end_flush() 將緩衝區關閉,資料就直接丟給web server作輸出
|
|
|
|
|
已記錄
|
|
|
|
|
|
|
|
|
appleboy
|
 |
« 回覆文章 #23 於: 2008-07-29 22:30 » |
|
你的這個問題超怪,其實我也不確定為啥 client 端 CPU 會飆高? 換瀏覽器測看看?
|
|
|
|
|
已記錄
|
|
|
|
|
joeyhsy
|
 |
« 回覆文章 #24 於: 2008-07-29 22:53 » |
|
你的這個問題超怪,其實我也不確定為啥 client 端 CPU 會飆高? 換瀏覽器測看看? "印象中"好像FF2和IE都是一樣,不過新的FF3沒試過,有空再試一下... 感覺好像client一直在接收卻沒有釋放,導致最後crash,如果是這樣, 用這些緩衝的函式可能不適合拿來跑長途車了,不過不過...以上純猜測, 應該沒我想的那麼單純,希望有高人能指導一下了 
|
|
|
|
|
已記錄
|
|
|
|
|
ricky
|
 |
« 回覆文章 #25 於: 2008-07-30 09:18 » |
|
原因在於 Javascript只有單執行緒 簡單的說他在執行的時候網頁其他元件也都不能動作了 echo "<script>document.getElementById('test').innerHTML='".$i."';</script>"; 這一行又一直將資料用javascript寫入 等於是讓javascript跑一個無窮迴圈 當然慢嘍 建議你,可以直接將結果輸出到網頁 別用javascript去填值 原本的程式可以改成這樣,比較有效率一些 <? $mtime=100000; //關閉緩衝區,將資料直接輸出 ob_end_flush(); while (1) { $i++; echo "$i<br>"; usleep($mtime); } ?>
|
|
|
|
|
已記錄
|
|
|
|
|
joeyhsy
|
 |
« 回覆文章 #26 於: 2008-07-30 14:23 » |
|
原因在於 Javascript只有單執行緒 簡單的說他在執行的時候網頁其他元件也都不能動作了 echo "<script>document.getElementById('test').innerHTML='".$i."';</script>"; 這一行又一直將資料用javascript寫入 等於是讓javascript跑一個無窮迴圈 當然慢嘍 這麼說起來... 如果我的目的是要把某一個div一直更換內容, 然而又受限於javascript的單執行緒,那麼就無解了是嗎?
|
|
|
|
|
已記錄
|
|
|
|
|
fillano
|
 |
« 回覆文章 #27 於: 2008-07-30 15:14 » |
|
既然都用到javascript了,不考慮用ajax做?
|
|
|
|
|
已記錄
|
Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.
|
|
|
|
joeyhsy
|
 |
« 回覆文章 #28 於: 2008-07-30 17:11 » |
|
既然都用到javascript了,不考慮用ajax做?
嗯,怎麼說咧.... ajax是不會有這個問題沒錯,可是ajax從client端到server,再從server回到client,前面那一段是我不要的....(大概就知道我想幹嘛) 潰堤的原因大致找出來了,因為server不斷丟東西過來,我看了一下瀏覽器的html碼,被...塞爆了  不過也因此見識到FF3的威力,我把mtime值調低到5000,IE是幾乎馬上趴倒,FF3撐了快一小時!! 我可能太天真了啦,看來讓server去搞client不是普通人玩的,至少不是現階段能力低下的我玩得起來的啊~
|
|
|
|
|
已記錄
|
|
|
|
|
hoyo
|
 |
« 回覆文章 #29 於: 2008-07-30 17:29 » |
|
嗯,怎麼說咧.... ajax是不會有這個問題沒錯,可是ajax從client端到server,再從server回到client,前面那一段是我不要的....(大概就知道我想幹嘛) 潰堤的原因大致找出來了,因為server不斷丟東西過來,我看了一下瀏覽器的html碼,被...塞爆了  不過也因此見識到FF3的威力,我把mtime值調低到5000,IE是幾乎馬上趴倒,FF3撐了快一小時!! 我可能太天真了啦,看來讓server去搞client不是普通人玩的,至少不是現階段能力低下的我玩得起來的啊~ Server PUSH !? 在 IE 跑過,沒遇到你說的問題 甚至 PUSH 心電圖檔也沒當過,當初 sleep 的時間都很短,因為希望可以即時呈現 (圖控系統測試)
|
|
|
|
|
已記錄
|
 線上測驗平台受人與魚,不如授人與漁 上海自來水來自海上;倫敦好奇人奇好敦倫
|
|
|
|