我想知道,有我在不同的目錄保存在根目錄之外的幾個文件,我試圖用一個HTML表單張貼信息到位於OUTSIDE根目錄在根目錄之外使用php文件的HTML表單操作?
是一個PHP文件那可能嗎?如果是這樣,怎麼樣?
我想知道,有我在不同的目錄保存在根目錄之外的幾個文件,我試圖用一個HTML表單張貼信息到位於OUTSIDE根目錄在根目錄之外使用php文件的HTML表單操作?
是一個PHP文件那可能嗎?如果是這樣,怎麼樣?
做一個代理腳本...這東西是的 web目錄裏面,但它是所有包含適當的 「保護」 文件:
DOCROOT/form_handler.php
<?php
include "../secret/form_handler.php";
DOCROOT/form.html
...
<form action="form_handler.php">
...
事實上,這是設置了多少個網站(本質上至少)。在這種罕見的情況下,將Apache的大部分腳本放在DOCROOT之外是很常見的情況,即在Apache或類似文件不解析PHP的情況下(即,如果配置錯誤),它不會無意中發送源代碼。
在我的網站上,各種形式的我開始使用此代碼:
<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
,以確保黑客無法穿越到不同的目錄。
我該如何使用HTML表單發佈到那個呢? – Kalcoder 2012-07-09 07:37:46
@Kalcoder:您需要創建一個可從'public_html'目錄中看到的文件,然後將表單發佈到該目錄。要讓文件在webroot之外執行的唯一方法是將其包含在webroot中的文件中。 - 或者可能有一些花哨的網絡服務器配置。 – Leigh 2012-07-09 07:41:11
好點@Leigh,這*是可能的mod_rewrite(替換可以是文件系統路徑)。如果你有興趣,你應該提交作爲答案:-) – 2012-07-09 07:51:00