黑客在PHP提交中可以突破GET或POST方法的最早地點是什麼?突破POST或GET變量PHP,安全
例如,
如果我處理表格第一行是:
$id= $_GET['id'];
$post_id= $_POST['post_id'];
可他們已經插入一些惡意代碼,當變量設定爲等於未過濾,將執行GET和POST ?
感謝
黑客在PHP提交中可以突破GET或POST方法的最早地點是什麼?突破POST或GET變量PHP,安全
例如,
如果我處理表格第一行是:
$id= $_GET['id'];
$post_id= $_POST['post_id'];
可他們已經插入一些惡意代碼,當變量設定爲等於未過濾,將執行GET和POST ?
感謝
eval($_GET['foo']);
,或間接,在作業後$a = $_GET['foo']; eval($a);
。"="
本身不會觸發對分配內容的執行或解釋。你可能會認爲它是安全的。"="
爲「等於」。不要這樣做。 通過使用賦值運算符,左操作數被設置爲右邊表達式的值(不是「等於」,而是「被設置爲」)。$a = $_GET['a']; $a();
其實這是我能想到的確定最早的地方一個exec的,我不應該再是一個都捨不得虧的。
我的建議是:
工作流程
不要相信進來的數據。驗證它。
使用$_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
只要你不要做一些愚蠢像eval()
他們或直接把那些到MySQL查詢,它的罰款。
它們大多隻是字符串,所以沒有直接的危險(如果你的意思是像Windows上的病毒)。
下面是一些可能的 「惡意」 的東西,你可以得到:
.php
文件,並稍後執行)</html>
)「如果eval()是答案,那麼你肯定會問 錯誤的問題。」 - Rasmus Lerdorf,BDFL,PHP – Sammitch
eval()有一個常見用例:在線PHP編輯器,用於實時編碼。這就是沙盒的原因。 –
不,在PHP中處理外部輸入值不,只要你不使用數據造成任何風險在某些解釋性語言中,區分代碼和數據。
因爲在這種情況下,您可能會受到injection的影響。和解釋語言,我的意思是像HTML(Cross-Site Scripting),SQL(SQL Injection),PHP(Code Injection)任何語言,shell命令(Command Injection)etc.
因此,如果您在其他任何方式使用外部數據,確保處理它正確。
+1提供CWE鏈接 –
不會。當您嘗試*使用*這些變量並且它們包含惡意輸入時,就會成爲問題。 –
約翰說什麼。無論何時,當您收到用戶的輸入時,您都應該驗證它是否符合您期望的輸入的確切格式,對輸入進行清理,並拒絕任何不符合規範的內容。也就是說,您仍然應該使用參數化查詢之類的東西來防止SQL注入等常見事情。 – Sammitch
所以這個序列是「完全」安全的: 獲取變量未過濾 - >準備語句存儲在db->獲取表單數據庫和顯示在HTML使用htmlspecialchars()或htmlentities() – Harvard