Jump to content
php.lv forumi

Recommended Posts

Posted (edited)

Man būtu vajadzīgs koda paraugs kas atfiltrē nost visus simbolus neieskaitot ciparus no 0 līdz 9 un manējais ko es uztaisīju ir šitāds, bet manuprāt viņš nav drošs un var saturēt kādu caurumu piemēram XSS vai kādu citu un kods ir te

function filter($data)
{
$data=ereg_replace("[a-zA-Z]","",$data)
$data=ereg_repalce("<>{}[];:'\"\\/|+=_-)(*&^%$#@!~`","",$data);
$data=ereg_repalce(" ,.?","",$data);
return $data;
}

un izmanto šādi:

$id=filter($_GET['id']);

Vai kāds var ieteikt kādu citu variantu kur atļauj tikai ciparus no 0 līdz 9

un PILNĪGI visus pārējos atfiltrē??

Edited by 4e4en
Posted
ja vajag ciparus izmanto intval()

Tas neko nefiltrēs. intval() mēģinās pārkonvertēt doto stringu uz integeru, bet ja būs kāds burts pa vidam, tad nekas nesanāks.

Posted (edited)

ā) - stringam jābūt ciparam, e.g. $_POST['x']=='23', pārbaudāms ar

if ($_POST['x']*1) (ar izņēmumu, ja tas var būt =='0', || $_POST['x']==='0')

jo ja viens no multiplikātoriem būs strings, tas tiks pārkonvertēts par 0 (būtībā, var arī plusēt 0)

bē) jādabon vienalga kādus ciparus no stringa, e.g. ja pārbauda seriāņiku:

$len=strlen($_POST['x']);
$number='';
while(--$len>-1)
if ($_POST['x']{$len}==0 || $_POST['x']{$len}*1)
  $number.=$_POST['x']{$len};

Edited by Venom
Posted (edited)

Es arī sākumā gribēju ieteikt intval, bet problēma rodās, ja jāapstrādā, piemēram, 30 simbolu garas ciparu virknes - tādā gadījumā intval nedos pareizu rezultātu.

vai šāda problēma ir aktuāla šī jautājuma autoram, tas jau ir cits jautājums.

 

P.S. XSS laikam domāts Cross Site Scripting

Edited by Aleksejs
×
×
  • Create New...