2012-12-20 84 views
4

我用mode_rewrite與codeiniter有網址的如:笨:URL保護

/controller/param1/param2 

大部分時間參數1和參數的將是從數據庫(即數字),並沒有別的標識。

問題是,我該怎麼做才能保護它免受潛在的黑客攻擊?我應該使用html淨化器嗎,還是有更好的方法,還是需要做點什麼?

我在安全和保護方面確實很新,而且我剛剛聽說過有關html淨化器的問題,我寧願不像其他初學者那樣使用它。

我應該只是preg_match()嗎?

如果preg_match()是soluton,expresiion只接受數值(ID值)?

+0

你主要是擔心XSS或SQL注入?因爲這兩個攻擊媒介的答案是不同的。 – slimdrive

+0

兩者......我想。我的意思是ID後來用於通過db查詢訪問數據,在此之前,可能會濫用xss vise ...我需要限制它,以便它只接受數字的東西,所以我認爲preg_match()可能幫幫我。 – ignite1688846

+0

其實我認爲codeigniter的活動記錄類阻止了sql注入。 – ignite1688846

回答

2

在您的配置文件,您可以找到

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-+'; 

你不需要使用預浸比賽,因爲它是在笨通過這個上另一方面已經做了我會推薦給有驗證的唯一正確的人能訪問此鏈接 例如,如果有項目ID未顯示爲只讀用戶或此類,您可以通過路由或在控制器中進行一定的檢查後處理此問題

但是我的安全性不是很好,但是我知道的到目前爲止

0

如果這不是一個codeignitor的具體問題,但一般如何清理用戶輸入然後一個簡單的解決方案將在提交SQL之前轉義&引用該值。

像這樣的工作(警告:未經測試的PHP代碼):

function escapeAndQuoteValue($value, $forceQuote = false) { 
    if (is_null($value)) { 
     $escapedString = 'NULL'; 
    } elseif (is_bool($value)) { 
     $escapedString = $value ? 'TRUE' : 'FALSE'; 
    } elseif (isDigits($value) && $value[0] != '0') { 
     $escapedString = $value; //return ints verbatim -- unless it has a leading zero 
    } else { 
     $escapedString = pg_escape_string($value); 
    } 

    $quoteString = 
     $forceQuote  || 
     is_null($value) || 
     is_bool($value) || 
     (isDigits($value) && $value[0] != '0'); 

    return $quoteString ? "'$escapedString'" : $escapedString; 

}