2010-04-17 28 views
0

我有一個PHP腳本,我不希望任何人都能夠通過他們的瀏覽器運行。設置php文件權限,這樣只有我的服務器的捲曲可以運行

它發送電子郵件,並通過我的服務器的cron捲曲調用,但需要在公共www目錄。我需要什麼權限或所有者才能將文件設置爲僅允許我的服務器的curl執行(或者我的意思是讀取)文件?

我在centos上。

謝謝!

回答

2

你既可以限制訪問的文件放置適當的訪問限制.htaccess文件的目錄或在你的PHP文件的開頭是這樣實現基本密碼檢查:

<?php 
$password = $_GET['password']; 
hash = '40bd001563085fc35165329ea1ff5c5ecbdbbeef'; //precalculated sha1 hash of your password 
if (sha1($password) != $hash) { 
    die('Forget it!'); 
} 

對於這可以進一步提高安全性,但你的想法...

+0

所有優秀的答案,但這一個提供了所需的安全性,同時仍然允許我從我的瀏覽器訪問該文件進行測試。 謝謝! – robr 2010-04-17 18:09:44

+0

歡迎您。你幫我得到了1024個聲望點:) Thx。 – selfawaresoup 2010-04-17 18:55:17

0

爲什麼不使用php-cli從命令行運行而不是通過curl運行?

如果你真的必須承載它,你可以做這樣的事情在你的.htaccess

<Directory /your/path/> 
Order allow,deny 
Allow from 192.168.1.0/24 
Allow from 127 
</Directory> 
2

如果可以的話,我會建議做一個不同的方法:運行該腳本通過CLI(調用php -f在cron作業中)並讓PHP腳本檢查它是如何運行的。您可以使用php_sapi_name()找出命令行界面是否調用該腳本,並在從Web調用該腳本時終止該腳本。據我所知,這將是最安全的解決方案。

如果你真的需要通過curl得到它,使用Josh的解決方案或定義需要添加到腳本的GET參數密鑰:

curl domain.com/script.php?password=123456 

並不十分安全,因爲該密鑰將是可見的在crontab中,但是應該提供適當的防範來自外部的訪問,特別是如果你將它與檢查$_SERVER["REMOTE_ADDR"]並確保它是127.0.0.1

0

這是不可能的,因爲措辭。從我所知道的情況來看,我認爲有很多選項可以用來解決您的問題:

您可以chown root或其他用戶,然後chmod 700,然後使用PHP的命令從cronjob調用腳本來自所有者的crontab文件的在線功能。

如果您需要通過curl訪問文件,那麼您正在訪問Web服務器,並且Web服務器需要能夠執行/讀取腳本,這將允許任何人執行腳本。

另一種選擇是使用基於規則的訪問控制,如下所述:http://library.linode.com/web-servers/apache/access-control/rule-based-access以確保只有源自服務器的連接能夠訪問相關文件,但這本身並不完全理想。

當然還有其他的解決方案,但我希望這是有幫助的。

相關問題