2011-10-17 35 views
0
function intfix($i) 
{ 
    $i = preg_replace('/[^\d]/', '', $i); 
    if (!strlen($i)) 
     $i = 0; 
    return $i; 
} 


function textfix($text = ""){ 
if(!is_array($text)){ $text = htmlentities($text,ENT_QUOTES,"UTF-8"); 
} 
return $text; 
} 

這兩個函數過濾所有用戶提交的變量。你覺得它足夠安全嗎?字符編碼和網站安全

我對字符編碼有點困惑。我想讓我的用戶可以玩ACII藝術,並使用任何他們想要的符號,但目前看起來不可能。應該做什麼?這可能與表格的編碼以及我的功能有關。

編輯:

數字其實真的很大。有時以萬億計。

這是我如何過濾用戶輸入一個例子:

if($_GET['number']){ $number = intfix($_GET['number']); } 
if($_GET['text']){ $text = textfix($_GET['text']); }' 

是這個錯誤你在說什麼?

此外,這是我如何插入到數據庫之前進行篩選:

function filter($input,$s=1){ 

    $input = strip_tags($input, ""); 
    $input = str_replace("\n", "<br />", $input); 
    if($s == 1){$input = bbcode($input); } // smileys and bbcode 
    $input = textWrap($input); // wordwrap without breaking html 
    return $input; 
} 

function unfilter($input){ // to unfilter in case I need to show the text in a textbox 

    $input = html_entity_decode($input,ENT_QUOTES,"UTF-8"); 
    $input = str_replace("<br />", "\n", $input); 

    return $input; 

} 

回答

1

將intfix替換爲intval()floatval() - 除非您預期數量很大,否則您會重新發明輪子。

我希望你在輸入時不使用textfix()?那將是一個非常大的錯誤。您只能在輸出上編碼實體,而不能在輸入上編碼。

爲UTF-8,你可能需要:

ini_set('default_charset', 'UTF-8'); 
+0

這些數字實際上非常大。有時以萬億次爲單位,因爲這是一款MMORPG遊戲。這個例子是如何過濾用戶輸入的: if($ _ GET ['number']){$ number = intfix($ _ GET ['number']); }($ _GET ['text']){$ text = textfix($ _GET ['text']);} if }' 這是你所說的錯誤嗎? – domino

+0

我在我的主要文章中添加了兩個其他函數,展示瞭如何在插入數據庫之前過濾數據。希望你可以看看。 – domino

+0

不,不,不。這不好。你的intfix是可以的,如果你確實有數字大於32位有符號整數。 (雖然我很驚訝你有數字這麼大。)但其餘的都不好。 textfix和filter應該在OUTPUT * NOT *上輸入!對於數據庫使用'mysql_real_escape_string()',沒有別的。當你在頁面上顯示它時,你可以過濾等。 – Ariel

0

intfix()功能是沒有必要的,你可以簡單地強制轉換做$num = (int)$num;

至於串消毒爲int,如果您不能使用參數化查詢,請將您的字符串傳遞給myqsl_real_escape_string()

+0

mysql_real_escape_string具有絕對的,當你顯示的東西沒有價值。 alert('hello')仍然會提醒('hello'),讓您的網站對XSS保持開放。 –

+0

由於問題標記爲mysql,OP包含對數字清理功能的引用,因此mysql_real_escape_string非常有價值。將用戶輸入存儲在數據庫中而不消毒可能的SQL注入是一個比不篩選XSS嘗試的輸入更大的問題。正如Ariel所說,XSS可以在產出上得到處理。 –

+0

顯然mysql_real_escape_string是最好的保護工具,但我只是說,盲目地將它應用於所有認爲你安全的東西,並不能解決你所有的問題。 –