[英]HTML form action using a php file outside of root directory?
我想知道,有一些文件我保存在根目錄之外的不同目錄中,我試圖使用HTML表單將信息發布到位於根目錄外的php文件
那可能嗎? 如果是這樣,怎么樣?
做一個代理腳本...什么是網站目錄內,但它是所有包含適當的“保護”的文件:
DOCROOT / form_handler.php
<?php
include "../secret/form_handler.php";
DOCROOT / form.html
...
<form action="form_handler.php">
...
事實上,這是設置了多少站點(實質上至少)。 通常將大多數腳本放在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
來確保黑客無法遍歷不同的目錄。
是的,它是可行的。 該目錄應作為單獨的站點托管,然后您可以將該文件的絕對URL作為表單操作
該文件必須可從Web訪問。
如果“Root之外”目錄意味着在DocumentRoot之外,那么這是不可能的。
你可以在DocumentRoot中有一個基本的Controller,它包含或調度動作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.