2011-05-31 56 views
2

有些人可能知道可以從Flash遠程調用PHP方法。 有時,遠程PHP方法的輸入參數是一個整數數組。 由於PHP是動態輸入的,攻擊者可以傳遞任何數組。 必須在SQL查詢中使用整數數組。 目前我防止注射這樣的:動態類型語言和遠程方法調用

foreach ($unsafeArray as $value) 
    $safeArray[] = (int)$value; 

你會怎麼推薦?也許我應該開始使用Java:D

+1

問題不在於類型系統,而是使用rpc協議。靜態/動態類型與其正交。 – troelskn 2011-05-31 07:24:24

回答

1

您可以使用此:$aSafeArray = array_map('intval', $aUnsafeArray);以確保所有傳遞的值都是整數。我的建議是開始使用prepared statements! 示例:

$o->bindParam(':anint', $iInt, PDO::PARAM_INT); 
0

你會推薦什麼?

我不是Flash專家,但的確可以通過知道它的名字來調用PHP方法,並且參數可以作爲數組傳遞。所以問題實際上不是遠程方法調用,而是輸入過濾和驗證。

根據不同的行爲,我會使用intval而不是硬轉換爲int(AFAIR它會在無效值時返回0),否則可以拋出異常或其他。你必須首先定義它的行爲。

也許我應該開始使用Java

不,除非你想同時在編譯和運行時的發展速度和巨大的存儲需求方面臃腫的解決方案:對

+0

對於預期目的,「硬鑄造爲int」和「intval」完全相同。另外,請你澄清你的第一段意思是什麼? – deceze 2011-05-31 06:51:41

+0

哎呀,對不起。我重新閱讀我的PHP文檔,確實你是正確的。我的意思是標題並不真正反映真正的問題,即輸入過濾和驗證。 – LeleDumbo 2011-06-02 09:25:12