2016-03-24 32 views
0

我使用extract來獲取POST發送的表單的所有值,並將它們保存在不同的變量中。 我的疑問是,如果使用extract()與標誌EXTR_SKIP是防止安全問題的「最佳方式」,比如(可能?)覆蓋表單的值以及我不知道的其他安全問題(我對Web安全性的知識是相當有限)使用extract()標誌EXTR_SKIP來防止安全問題

+1

爲什麼你要使用它,而不是像現在這樣處理'$ _POST'變量? – Jon

+0

@Jon因爲我有很多輸入,我總是喜歡學習最快的方式,更高效(明顯知道安全) –

+1

這個,我不相信,是你想要的解決方案。 'register_globals()'由於某種原因自動關閉。 ^^最好在它處於'$ _POST'或'$ _GET'數組中時處理它。這樣做也意味着,在查看代碼時,您知道什麼是嚴格的用戶輸入,並且如果將它移動到正常變量,您將通過簡要地瞭解您是否已按需要進行了清理。 – Jon

回答

2

我有很多的投入,我一直想學習最快的方式,以提高工作效率(顯然是爲了能夠快速讀取感知安全

優化的,不能快速寫入。

但是,如果你真的想要走這條路線:

<?php  
// Important, ONLY allow the indices you really want to support 
$whitelist = array_key_whitelist($_POST, [ 
    'foo', 
    'bar', 
    'baz', 
    'moo', 
    'usr', 
    'lol' 
]); 
// Then run extract() as expected 
extract($whitelist, EXTR_SKIP); 

,功能當然是:

<?php 
/** 
* Only allow the whitelisted array keys to exist: 
* 
* @ref http://stackoverflow.com/a/36193403/2224584 
* @param array $input 
* @param array $allowedKeys 
* @return array 
*/ 
function array_key_whitelist(array $input, array $allowedKeys = []): array 
{ 
    $return = []; 
    foreach ($allowedKeys as $key) { 
     if (array_key_exists($key, $input)) { 
      $return[$key] = $input[$key]; 
     } 
    } 
    return $return; 
} 

這比extract()EXTR_SKIP在,在未來,變數可能就不會置自己的理智循環的情況下稍微更安全如果它們已經被定義的話。

但嚴重的是,這是更多的代碼高爾夫精細比練習,你應該其實後面。

相關問題