2011-08-22 143 views
-1

我在我的PHP應用程序中使用了大量的Ajax,並且通常用於路由POST請求以進行處理,我檢查期望的變量和值並基於我處理腳本。

例如,如果我想刪除或使用AJAX我將處理POST請求會像

//Initialize the class on top of the page that will be dealing with CRUD functions. 
$class = new CRUD(); 
//Delete Something 
if(isset($_POST['option']) && $_POST['option'] == 'delete-something') { 
    //Delete logic. 
} 
//Save Something 
if(isset($_POST['option']) && $_POST['option'] == 'save-something') { 
    //Save logic. 
} 

等典型的PHP文件中插入一些東西。我只是想知道如果代碼if(isset($_POST['option']) && $_POST['option'] == 'delete-something')會給我保護,防止未經授權的請求。或者我應該在條件下使用$_SERVER['REQUEST_METHOD'] == 'POST'。兩者真的有什麼區別嗎?因爲我看到很多使用$_SERVER['REQUEST_METHOD'] == 'POST'的開發者。

+0

你是什麼意思未經授權?該代碼不會執行任何授權/驗證檢查。 – Fabio

+0

我的理解是,如果您清理任何用戶輸入,並使用POST進行類似的操作 - >您可以最大限度地減少未授權請求的可能性。 –

+0

超級全局變量總是「設置」,因此無論當前請求是否通過POST實際完成,isset($ _ POST)都爲true。 –

回答

1

如果HTTP請求它不是POST請求,$_POSTDocs將不會被實際值填充,所以如果您測試特定值,在技術上不需要檢查請求是否爲POST請求。

但是,您有時只是想知道$_POST超全局數組中的具體值的w/o測試,因此檢查服務器變量$_SERVER['REQUEST_METHOD']Docs是合理的。

所以:這取決於上下文你需要做什麼。

+0

有人能真正發送遠程POST請求到我的腳本?因爲我將使用不同的文件來處理Ajax請求。我所做的只是檢查一些預期的變量並處理該值。我是否面臨安全威脅? –

+0

當然,這只是一個標準的HTTP請求。你認爲瀏覽器如何做到這一點?只是標準的方式。(當然,這個請求並不是開放的,安全是一個非常模糊的術語,所以我不能告訴你在你的應用程序中是否存在安全風險,我想它需要處理HTTP請求,所以我猜沒關係) – hakre

+0

哦,如果我用會話變量檢查腳本,它會更好嗎? –

0

好了,至少,這樣做...

if (isset($_POST['option']) && $_POST['option'] == 'delete-something') 

...將防止在$_POST['option']不存在的情況下的通知。所以,即使使用$_SERVER['REQUEST_METHOD'] === 'POST',您仍可能仍想使用isset($_POST['option'])

0

我只是想知道如果代碼if(isset($_POST['option']) && $_POST['option'] == 'delete-something')會給我保護,防止未經授權的請求。

當然沒有。
我不明白你爲什麼認爲它可以給予任何保護,你是什麼意思下的「未經授權的請求」。

我應該在條件下使用$_SERVER['REQUEST_METHOD'] == 'POST'。兩者之間真的有什麼區別嗎?

當然。 $_POST['option'] == 'delete-something'正在檢查某個字段,而
$_SERVER['REQUEST_METHOD'] == 'POST'正在檢查請求方法。
你根本不能用後者代替前者。我也不明白這個問題。

相關問題