2012-07-18 63 views
0

我打電話給我的主要頁面framework_ui.php我需要auth.php我有一個過濾器函數。過濾器獲取和發佈值

function filter($data) 
{ 
    // normalize $data because of get_magic_quotes_gpc 
    $dataNeedsStripSlashes = get_magic_quotes_gpc(); 
    if ($dataNeedsStripSlashes) { 
     $data = stripslashes($data); 
    } 
    // normalize $data because of whitespace on beginning and end 
    $data = trim($data); 
    // strip tags 
    $data = strip_tags($data); 
    // replace characters with their HTML entitites 
    $data = htmlentities($data); 
    // mysql escape string  
    $data = mysql_real_escape_string($data); 
    return $data; 
} 

,並用GET和POST變量在每一頁上我做了(並叫我framework.php)

// filter GET values 
foreach ($_GET as $key => $value) { 
    $get[$key] = filter($value); 
} 
// filter post 
foreach ($_POST as $key => $value) { 
    $post[$key] = filter($value); 
} 

請問,如果我做了一個功能和呼叫上面的功能仍然正常運行而是在每一頁上?

function filter_all() { 
// filter GET values 
foreach ($_GET as $key => $value) { 
    $get[$key] = filter($value); 
} 
// filter post 
foreach ($_POST as $key => $value) { 
    $post[$key] = filter($value); 
} 
} 

我明白這不是最安全的方式,但我想知道這樣的事情是否可能,並不會負面影響我的代碼。

+3

你'filter'功能** ** TERRIBLE,運用隨機函數勉強與輸入到「安全」 – zerkms 2012-07-18 22:18:17

+0

你的問題並不清楚:「我在想,如果這樣的事情是可能的,止跌」不會對我的代碼產生負面影響。「 - 你爲什麼不試試呢? – alfasin 2012-07-18 22:19:47

+1

同意@zerkms。這就是說,你需要從函數中返回'$ get'和'$ post',否則它們將退出範圍。 – sberry 2012-07-18 22:20:12

回答

1

您只需進行一些調整以確保「過濾」值可用於其餘代碼。有幾種方法可以做到這一點,將它們標記爲global或返回它們;很可能第二個選項通常被認爲更清潔。這裏有一個例子:

function filter_all() { 
    $get = array(); 
    $post = array(); 

    // filter GET values 
    foreach ($_GET as $key => $value) { 
     $get[$key] = filter($value); 
    } 
    // filter post 
    foreach ($_POST as $key => $value) { 
     $post[$key] = filter($value); 
    } 
    return array(
      'get' => $get, 
      'post' => $post); 
} 

$aFilteredInput = filter_all(); 
$get = $aFilteredInput['post']; 
$post = $aFilteredInput['post']; 
1

你filter_all()函數沒有返回,因此後您的函數結束運行這些原始變量您的foreach通過循環將有效地同它不會修改$ _GET和$ _POST全局。如果你打算使用它們或者返回兩者的組合,你應該直接操作$ _GET/$ _ POST或全局$ get/$ post。除此之外,您計劃要做什麼並不一定是負面的。

如果你打算這樣做,每次都不要做一個函數,只是包含一個文件(比如你的framework_ui.php),它只是做循環和過濾變量。

zerkms是正確的,雖然你的過濾函數並不理想,因爲它不安全,事實上,如果你打算重新顯示用戶提交的信息(在其他許多事情中),mysql_real_escape_string會導致問題。

引述OWASP ESAPI項目主頁:

不要寫你自己的安全控制!當涉及到爲每個Web應用程序或Web服務開發安全控制時重新創建輪子會導致浪費時間和大量安全漏洞。 OWASP Enterprise Security API(ESAPI)工具包可幫助軟件開發人員防範與安全相關的設計和實施缺陷。 http://code.google.com/p/owasp-esapi-php/

+0

感謝您的owasp鏈接,我將不得不考慮它。也感謝您的解釋! – Alex 2012-07-18 22:38:56

+0

沒問題Alex,祝你好運!也可能有更多資源的主站點位於https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API – 2012-07-18 22:53:25