我運行的基本形式管理MySQL數據庫內容的幾個PHP Web應用程序(添加,刪除和更新)。現在我希望能夠以編程方式插入數據,但是我已經將所有邏輯放在PHP中(數據庫端沒有驗證),我想重用我擁有的PHP邏輯。我的服務器上創建一個本地PHP頁面
我想到了具有接收查詢字符串的產品參數一個新的URI,但我只想要端點可用時,它從服務器(以避免外部用戶將它命名)中調用。
我在Ubuntu 12.04上運行的Apache服務器。我希望我解釋這口井
我運行的基本形式管理MySQL數據庫內容的幾個PHP Web應用程序(添加,刪除和更新)。現在我希望能夠以編程方式插入數據,但是我已經將所有邏輯放在PHP中(數據庫端沒有驗證),我想重用我擁有的PHP邏輯。我的服務器上創建一個本地PHP頁面
我想到了具有接收查詢字符串的產品參數一個新的URI,但我只想要端點可用時,它從服務器(以避免外部用戶將它命名)中調用。
我在Ubuntu 12.04上運行的Apache服務器。我希望我解釋這口井
你可以看看$_SERVER['REMOTE_ADDR']
,這是客戶端連接到一個PHP腳本的地址。
if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1') {
// connection from localhost, proceed
} else {
// connection from the outside, deny
header('403 Forbidden');
echo "You are not allowed to be here.";
die();
}
要考慮到,如果你有在同一臺機器上的反向代理,然後到你的腳本的所有連接將來自代理,你將沒有辦法知道他們是否真正從本地主機或從另一個主機。從@ x4rf41
評論也不錯,管理從網絡服務器層(雖然它具有與反向代理同樣的問題)。
另一種選擇將是一個命令行腳本,而不是一個網頁,在那裏你將數據作爲參數傳遞給腳本:
#!/usr/bin/env php
<?php
// total number of params is in $argc (minus 1, for the script name)
// param 1 in $argv[1]
// param 2 in $argv[2]...
// argv[0] is reserved for the name of the script
if ($argc != 5) {
fprintf("STDERR: %s param1 param2 param3 param4\n", $argv[0]);
exit(1);
}
// do your logic here
,所以我可以有一個.php腳本完全從服務器本身解耦,「包含」添加操作所需的服務器.php文件,並將其稱爲通常的腳本(傳遞參數ovr命令行,在腳本中解析它們並調用該方法添加到數據庫)? – rnunes
@rnunes是的,這就是主意 –
不要做一個全面的HTTP請求到自己的服務器。這是毫無意義的資源浪費,同時也帶來了一系列安全問題。
重寫代碼,以便它作爲一個功能正常調用,那麼它是一個簡單的一個之事:
的functions.php:
<?php
function do_whatever_it_is_you_want() {
echo 'yo';
}
的index.php:
<?php
include('functions.php');
do_whatever_it_is_you_want();
現在將功能「暴露」到世界中沒有任何安全問題,因爲它不是通過URL直接調用 - 只能通過您完全控制的代碼。
您可以使用htaccess限制對某些文件或目錄的訪問。看這一個開始:http://stackoverflow.com/questions/4400154/htaccess-deny-all-allow-only-one-ip你也可以檢查'$ _ SERVER [「REMOTE_ADDR」]' – x4rf41
您可以運行PHP從命令行或者你可以創建一個只監聽本地主機的虛擬主機,阻止任何人訪問它。 –