2012-07-09 43 views

回答

4

做一個代理腳本...這東西是 web目錄裏面,但它是所有包含適當的 「保護」 文件:

DOCROOT/form_handler.php

<?php 
include "../secret/form_handler.php"; 

DOCROOT/form.html

... 
<form action="form_handler.php"> 
... 

事實上,這是設置了多少個網站(本質上至少)。在這種罕見的情況下,將Apache的大部分腳本放在DOCROOT之外是很常見的情況,即在Apache或類似文件不解析PHP的情況下(即,如果配置錯誤),它不會無意中發送源代碼。

+0

我該如何使用HTML表單發佈到那個呢? – Kalcoder 2012-07-09 07:37:46

+0

@Kalcoder:您需要創建一個可從'public_html'目錄中看到的文件,然後將表單發佈到該目錄。要讓文件在webroot之外執行的唯一方法是將其包含在webroot中的文件中。 - 或者可能有一些花哨的網絡服務器配置。 – Leigh 2012-07-09 07:41:11

+0

好點@Leigh,這*是可能的mod_rewrite(替換可以是文件系統路徑)。如果你有興趣,你應該提交作爲答案:-) – 2012-07-09 07:51:00

1

是的,它是可行的。該目錄應作爲單獨的網站託管,然後您可以提供該文件的絕對URL作爲表單動作

+0

那種似乎是矯枉過正.. – 2012-07-09 07:10:08

+0

這不是他要求的。另外「是的,這是可能的」是最糟糕的答案。 – Leigh 2012-07-09 07:10:24

+0

問題不包括「是否有可能?」 – Rodrigo 2015-10-21 18:45:43

0

該文件必須可從網上訪問。
如果「根之外」目錄意味着DocumentRoot之外,這是不可能的。

您可以在DocumentRoot中包含或派發該操作的基本Controller。

+0

如果它在文檔根目錄下,但不在public_html中,該怎麼辦? – Kalcoder 2012-07-09 07:14:04

+0

該文件必須從網絡上調用,所以如果你可以調用它,就像f.e. /onedirunderdocumentroot/form.php你可以使用它。通常public_html是document_root,因此可以訪問它下面的所有內容。 – ivoba 2012-07-09 07:22:17

1

在我的網站上,各種形式的我開始使用此代碼:

<form action="action" method="post"> 
    <input type="hidden" name="i-action" value="do-whatever" /> 

這避免了需要多個代理腳本,因爲action.php會使用隱藏字段的值,以確定哪些PHP文件應該被調用。如果您使用Ajax發佈表單,請勿調用隱藏字段action,因爲它可能會導致衝突。此外,我已將.htaccess文件設置爲刪除php擴展名,因此您可能需要在HTML代碼中將.php添加到action

這裏是action.php

if (!empty($_POST['i-action'])) 
{ 
    $action = str_replace('.', '', $_POST['i-action']); 
    $action = str_replace('/', '', $action); 
    if (file_exists("../secret/directory/structure/$action".'.php')) 
     require_once("../secret/directory/structure/$action".'.php'); 
} 

我以前str_replace,以確保黑客無法穿越到不同的目錄。

相關問題