2024 年日本 PHP 研討會
新增註解

使用者貢獻的註解 11 則註解

dangan at blackjaguargaming dot net
17 年前
考慮到 403 回應會證明有東西值得駭入,我會建議使用 404 回應。

index.php
<?php
define
('isdoc',1);
include(
'includes/include.sqlfunctions.php');
// index.php 的其餘程式碼
?>

include.sqlfunctions.php (或其他 include 檔案)
<?php
if(isdoc !== 1) // 不完全等於 1
{
header('HTTP/1.1 404 Not Found');
echo
"<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>404 找不到</title>\n</head>";
echo
"<body>\n<h1>找不到</h1>\n<p>您要求的網址 ".$_SERVER['REQUEST_URI']." 在此伺服器上找不到。</p>\n";
echo
"<hr>\n".$_SERVER['SERVER_SIGNATURE']."\n</body></html>\n";
// 顯示類似 Apache 預設 404 的輸出 (如果您使用的是 Apache 的話)
exit;
}
// 此 include 檔案的其餘程式碼
?>
k
18 年前
不如乾脆不要把 PHP 程式碼放在網站根目錄底下呢?

您可以建立一個公開目錄,將 CSS、HTML 等檔案和 index.php 放在那裡。然後使用 include_path 設定指向實際的 PHP 程式碼,例如...

webstuff
phpcode
public
images
css
index.php

然後將 include 路徑設定為 "../phpcode",由於 PHP 是從腳本所在的目錄執行,所以一切應該都會正常運作。

我還會將主要的 index 檔案命名為 "main.page" 或其他名稱,而不是 "index.php",並更改網頁伺服器的預設 index 頁面。這樣一來,就不會被那些在網路上搜尋 index 頁面的程式掃到。
djjokla AT gmail dot com
18 年前
如果必須 include 單一檔案,我會使用以下方法

index.php (要 include 檔案的地方)
___________
<?php
define
('thefooter', TRUE);
include(
'folder/footer.inc.php');
?>

然後頁尾檔案 (例如) 看起來會像這樣

footer.inc.php (要被 include 的檔案)
___________
<?php
defined
('thefooter') or die('想都別想');
echo(
'2000 年版權所有');
?>

因此,當有人試圖直接存取 footer.php 檔案時,他/她/它會在螢幕上看到「想都別想」這條訊息。另一種選擇是將想要直接存取該檔案的人重新導向到其他位置,因此您必須在 footer.inc.php 檔案中撰寫以下程式碼,而不是上述程式碼。

<?php
defined
('thefooter') or header('Location: http://www.location.com');
echo(
'Copyright to me in the year 2000');
?>

一般情況下,重新導向到外部網站會讓訪客感到困擾,但由於這位訪客對駭入網站比閱讀內容更感興趣,我認為建立這樣的重新導向機制是公平的。我們真的不希望這種人在我們的網站上。

為了保護檔案,我使用 .htaccess 檔案,其中我設定保護檔案本身和每個 .inc 檔案。

<Files ~ "^.*\.([Hh][Tt]|[Ii][Nn][Cc])">
Order allow,deny
Deny from all
Satisfy All
</Files>

如果有人試圖直接存取這些檔案,.htaccess 檔案應該會產生 403 錯誤。如果因為某些原因這不起作用,則會顯示「別想得逞,我的朋友」的文字或重新導向(取決於所使用的設定)。

在我看來,這樣看起來沒問題也安全。
ocrow at simplexity dot net
21 年前
如果您的 PHP 頁面使用 include() 或 require() 函式引入位於網路伺服器文件根目錄下的檔案,例如與 PHP 頁面位於相同目錄下的程式庫檔案,您必須考慮到攻擊者可能直接呼叫這些程式庫檔案的可能性。

程式庫檔案中的任何程式層級程式碼(即不屬於函式定義的程式碼)都可以由呼叫者直接執行,而不受預期呼叫順序的限制。攻擊者可能會利用此功能造成非預期的影響。

防止這種情況發生的最可靠方法是阻止您的網路伺服器直接呼叫程式庫腳本,方法是將它們移出文件根目錄,或將它們放在設定為拒絕網路伺服器存取的資料夾中。例如,使用 Apache 時,在程式庫腳本資料夾中建立一個包含以下指示的 .htaccess 檔案:

Order Allow,Deny
Deny from all
Thomas "Balu" Walter
19 年前
由於許多使用者無法修改 Apache 設定或使用 .htaccess 檔案,避免不必要地存取 include 檔案的最佳方法是在 include 檔案的開頭新增一行程式碼:

<?php if (!defined('APPLICATION')) exit; ?>

並在所有允許外部呼叫的檔案中新增:

<?php define('APPLICATION', true); ?>

Balu
steffen at morkland dot com
18 年前
回覆 djjokla 和其他人

考慮將前面提到的所有 include 檔案放在一個包含 .htaccess 檔案的獨立資料夾中,該檔案包含 Order Deny,Allow 指令。

然後建立一個索引檔案,用於處理對 PHP 應用程式的所有請求,並使用 index.php?view=index 呼叫它。

索引檔案看起來可能像這樣:

<?php
switch($_GET['view']){
case
'index':
include(
'libs/index.php');
break;
default:
include(
'libs/404.php');
break;
}
?>

這可以是一個陣列或其他更具創造性的東西。實際上,你如何做到並不重要…透過一個中央腳本運行所有頁面有一個很大的優勢…控制。
在任何特定時間,您可以輕鬆地對函數實施存取控制,而不會忘記關鍵檔案。
inland14 at live dot com
5 年前
良好的 Dharma 令牌基本上位於 feed 的某處,允許不重新編程和注入的使用者進入網站。

每隔幾分鐘更改一次這個 POST AJAX 呼叫網址,以排除未關注您入口網站的使用者。您可以將其與他們來自何處結合起來。就像廣告點擊一樣。

您可以使用 time() 和每隔約 5 分鐘左右的一些測量值來製作一個完美的令牌。透過在登入時或甚至他們剛到網站時抓住免費令牌來平衡負載。並且不要讓他們在指定的第 5 分鐘或您定時更改的警衛的演算法總和之後進入 feed,而不知道令牌。這可以透過跨頁面傳遞變數來彌補。使用 curl 將 POST 令牌直接注入到您自己的網站。並將其像會話 ID 一樣組合。
匿名
9 年前
chroot 並不是安全功能。不要將其用作安全功能。請閱讀 chroot 的手冊頁以了解它的真正用途。
ManifoldNick at columbus dot rr dot com
21 年前
請記住,安全風險通常不需要幾個月的準備工作或後門程式,或者您在《劍魚行動》中看到的任何其他內容 ;) 事實上,新手最常犯的錯誤之一就是沒有從使用者輸入中移除「<」(尤其是在使用留言板時),因此理論上使用者可能會嚴重破壞頁面,甚至讓您的伺服器執行 php 腳本,從而讓他們對您的網站造成嚴重破壞。
匿名 at domain dot com
21 年前
最好的辦法是將 php 建置為 cgi,在 suexec 下運行,並使用 chroot 限制使用者。這不是最好的方法,但相當不引人注目,提供了多個檢查點,唯一的缺點是,嗯,有點慢。 8)
To Top