2014-03-28 81 views
0

黑客在PHP提交中可以突破GET或POST方法的最早地點是什麼?突破POST或GET變量PHP,安全

例如,

如果我處理表格第一行是:

$id= $_GET['id']; 
$post_id= $_POST['post_id']; 

可他們已經插入一些惡意代碼,當變量設定爲等於未過濾,將執行GET和POST ?

感謝

+5

不會。當您嘗試*使用*這些變量並且它們包含惡意輸入時,就會成爲問題。 –

+0

約翰說什麼。無論何時,當您收到用戶的輸入時,您都應該驗證它是否符合您期望的輸入的確切格式,對輸入進行清理,並拒絕任何不符合規範的內容。也就是說,您仍然應該使用參數化查詢之類的東西來防止SQL注入等常見事情。 – Sammitch

+0

所以這個序列是「完全」安全的: 獲取變量未過濾 - >準備語句存儲在db->獲取表單數據庫和顯示在HTML使用htmlspecialchars()或htmlentities() – Harvard

回答

0
  1. 最早地方突圍 - (CSRF等使用驗證碼或一些安全令牌通常避免),是,當進入的GET或POST數據是在terpreted。 可能是直接的,eval($_GET['foo']);,或間接,在作業後$a = $_GET['foo']; eval($a);
  2. 賦值運算符"="本身不會觸發對分配內容的執行或解釋。你可能會認爲它是安全的。
  3. 您可能會認爲"="爲「等於」。不要這樣做。 通過使用賦值運算符,左操作數被設置爲右邊表達式的值(不是「等於」,而是「被設置爲」)。
  4. $a = $_GET['a']; $a();其實這是我能想到的

確定最早的地方一個exec的,我不應該再是一個都捨不得虧的。

我的建議是:

工作流程

  1. GET/POST =不可信變量的內容
  2. 驗證,消毒在準備好的聲明
  3. 店分貝
  4. 使用
  5. 獲取訂單DB
  6. 逃生
  7. 顯示

不要相信進來的數據。驗證它。

使用$_dirty['foo'] = $_GET['foo']然後$foo = validate_foo($_dirty['foo']);

使用PHP的filter_input(),filter_var()或自己的驗證功能。

您也可以依靠PHP filter_input()函數,而不是編寫自己的validate_foo()邏輯。讀http://www.php.net/manual/en/function.filter-input.php

$search = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS); 

示例驗證傳入$ _GET [ 'ID']。 只有該值是一個整數並且在一定範圍內時,該值才應被視爲有效。

$range = array('options'=>array('default'=>1, 'min_range'=>0, 'max_range'=>10)); 
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, $range); 

數據庫:使用PDO &的PreparedStatement & bindValue

http://www.php.net/manual/en/pdostatement.bindvalue.php

2

只要你不要做一些愚蠢像eval()他們或直接把那些到MySQL查詢,它的罰款。

它們大多隻是字符串,所以沒有直接的危險(如果你的意思是像Windows上的病毒)。

下面是一些可能的 「惡意」 的東西,你可以得到:

  • SQL注入攻擊
    (破壞你的查詢做壞事,就像刪除表)
  • PHP注入攻擊
    (黑客希望你會評估它,或將其寫入.php文件,並稍後執行)
  • HTML/JavaScript注入攻擊
    (如果你打印一個頁面上,所以它可以運行不好的JavaScript或破壞佈局 - 在你的文章中間想象</html>
  • 鍛造表單字段
+1

「如果eval()是答案,那麼你肯定會問 錯誤的問題。」 - Rasmus Lerdorf,BDFL,PHP – Sammitch

+0

eval()有一個常見用例:在線PHP編輯器,用於實時編碼。這就是沙盒的原因。 –

2

不,在PHP中處理外部輸入值不,只要你不使用數據造成任何風險在某些解釋性語言中,區分代碼和數據。

因爲在這種情況下,您可能會受到injection的影響。和解釋語言,我的意思是像HTML(Cross-Site Scripting),SQL(SQL Injection),PHP(Code Injection)任何語言,shell命令(Command Injectionetc.

因此,如果您在其他任何方式使用外部數據,確保處理它正確。

+0

+1提供CWE鏈接 –