2015-12-02 134 views
-2

保護服務器上的PHP腳本以讓任何人運行PHP腳本的最佳(最簡單但有效的)方法是什麼?任何獲取我的腳本的URL地址的人都可以在我的服務器上運行該腳本,這可能會導致不需要的操作。我怎麼解決這個問題?如果我要在if($pass == 'mySuperSecretPass') { ... }之類的腳本條件的開始處添加,那麼閱讀代碼並獲得$pass變量的正確值是沒有問題的。在服務器上保護PHP腳本的最佳方式

請原諒我的英語。非常感謝你。

+1

如果你想使用某種類型的認證和/或授權機制,還有許多* *例子可在網上。即使你給出的過分簡化的例子(硬編碼密碼)也可以在足夠簡單的情況下完成工作。你有*使用這樣的密碼嘗試*嗎?這種嘗試以什麼方式*不成功? – David

+0

- 添加到您的PHP頁面頂部 –

+2

@LuckyChingi這幾乎不是一種保護。 – arkascha

回答

1

如果服務器應該是唯一使用內部訪問腳本的人您可以使用.htaccess規則隱藏/阻止其他人使用的方法。

RedirectMatch 404 "/(\/full\/path\/to\/restrictedFile\.php|\/path\/to\/restrictedFolder)" 

該重定向大家參觀/full/path/to/restrictedFile.php和/路徑/到/ restrictedFolder到您的錯誤的404頁。
腳本根本不會打開。
服務器在訪問本地文件時不尊重.htaccess規則,因此服務器可以運行它。

對於IIS:

This是描述我已經回答了,但IIS和Apache的不是一個網頁。

的總體思路是這樣的:

我不習慣與IIS配置和web.config中工作
<configuration> 
    <location path="glimpse.axd"> 
     <system.webServer> 
      <httpErrors errorMode="Custom"> 
       <remove statusCode="403" /> 
       <error statusCode="403" path="/Errors/NotFound" responseMode="ExecuteURL" /> 
      </httpErrors> 
     </system.webServer> 
    </location> 
</configuration> 

文件,所以我建議你閱讀我鏈接到頁面中,你可能會知道如何執行它。

+0

我真的很喜歡 - 謝謝。 Windows服務器上是否提供.htaccess? –

+0

適用於我... ' ' –

+0

@JanChalupa如果這些服務器使用Apache,是的。如果使用IIS,則必須使用「web.config」文件。 – x13

3

您是否考慮過使用Apache .htaccess? (請注意,您需要啓用AllowOverride。)

可以阻止訪問某些URL和密碼保護。

AuthType Basic 
AuthName "Authentication Required" 
AuthUserFile "/etc/htpasswd/.htpasswd" 
Require valid-user 

要創建htpasswd文件,使用這個工具:http://www.htaccesstools.com/htpasswd-generator/

此外,您還可以勃洛克IP的,而這個工具: http://www.htaccesstools.com/block-ips/

看看這有助於:https://wiki.apache.org/httpd/PasswordBasicAuth

0

這就是我所做的,具有自動登錄功能的非常簡單的登錄。首先我有一個靜態登錄,在這種情況下,usr = username。我也可以添加密碼或只接受某個IP地址。我將它保存在一個名爲login.php的文件中,並將其包含在必要的腳本中。

如果登錄已設置,請使用用戶名設置cookie,有效期爲1年。無需每次都從這臺計算機登錄!

如果cookie存在,設置會議LOGGED_IN =真

session_start(); 
if (isset($_REQUEST['usr'])) { 
    if ($_REQUEST['usr'] == 'username') { 
     setcookie('usr', 'username', time() + 3600 * 24 * 730, '/', $_SERVER['SERVER_NAME']); 
    } else { 
     setcookie('usr', '', time() - 3600); 
     unset($_COOKIE['usr']); 
    } 
} 

if (isset($_COOKIE['usr']) && $_COOKIE['usr'] == 'username') { 
    setcookie('usr', 'username', time() + 3600 * 24 * 730); 
    $_SESSION['logged_in'] = true; 
} else { 
    $_SESSION['logged_in'] = false; 
} 

現在,在我的代碼測試LOGGED_IN

if ($_SESSION['logged_in']) { 
    // Do some stuff 
} else { 
    header('Location: http://www.google.com'); 
    exit; 
} 

如果用戶沒有登錄,他重定向到另一頁!我不使用任何形式或東西。我第一次訪問該頁面我不喜歡這樣寫道:http://www.myserver.com/?usr=username

這不是最大的安全性,但一個簡單的方法來保持窺探出來。

如果你需要一個非常安全登錄,忘了餅乾和自動登錄,並移動到SSL加密的服務器(https://開頭)。

相關問題