2013-11-23 37 views
0

無法使用PDO。淨化數據PHP功能

我在這裏讀了很多的問題,這是我第一次嘗試做一些事情的人我的辦公室外面,所以我需要消毒的數據輸入,研究一下發現這個功能。

function clean_data($input){ 
$input = trim(htmlentities(strip_tags($input,","))); 
if (get_magic_quotes_gpc()) 
$input = stripslashes($input); 
$input = mysql_real_escape_string($input); 
return $input; 
} 

例如:

其確定該功能來淨化數據?

+0

這種方法很可怕,會破壞和破壞數據。只需使用適當的衛生方法對數據進行清理即可使用。例如。 'mysql_real_escape_string()'在運行'mysql_query()'之前。或者在輸出網頁上的任何內容之前使用'htmlentities()'。但是,PDO或mysqli真的是有益的 –

+0

因此,使用此代碼即時避免SQL注入, '$ sql =「INSERT INTO clientes VALUES(NULL,:iduser,:nombre,:cedula,:dir,:tel)」; $ query = $ db-> prepare($ sql); $ query-> execute( ':iduser'=>($ _ POST ['id']), ':nombre'=>($ _ POST ['nombre']), ':cedula'=> ($ _ POST ['cedula']), ':dir'=>($ _ POST ['dir']), ':tel'=>($ _ POST ['tel']), )'' – CCortina

回答

1

不是。

如果你打算把變量在數據庫中,你會用事先準備好的聲明與綁定變量會更好。如果你不能使用PDO,你也可以使用mysqli。如果你真的堅持mysql_*的功能,你只需要mysql_real_escape_string

如果輸出到瀏覽器,你只需要htmlspecialchars

總之,沒有通用的消毒功能,你需要爲你輸出到媒體準備/逃生/編碼數據。

0

這是一個很大的課題 - 這個功能是好的,但也有很多更好的方法來做到這一點。

檢查mysqli_real_escape_string:http://php.net/manual/en/mysqli.real-escape-string.php

不要忘了準備好的發言:http://php.net/manual/en/pdo.prepared-statements.php

另外,如果您輸入的整數類型是什麼?你應該打字。

另外,如果有什麼人增加了額外的字段到Web表單?

雖然這個功能確實做了一些衛生處理,但它只是冰山一角,就像我說這是一個很大的話題。

在我看來,這是一個草率的代碼,提供了很少的保護。