Gå til innhold

sikkerhet med is_numeric()


Anbefalte innlegg

Hvis jeg bruker is_numeric et sted, slipper jeg da GARANTERT å slippe å bruke mysql_real_escape_string()?

 

Har brukt begge hittil, men tenkte å optimalisere litt, så måtte høre om jeg sikkerhetsjekker dobbelt opp?

 

 

eks:

 

if( isset($_GET['id']) && is_numeric($_GET['id']) )

{

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

$sql = mysql_query("SELECT * FROM $db_shop_linksdb WHERE $db_shop_linksdb_id = $id;", $db);

..osv...

}

 

er da linje:

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

unødvendig?

Lenke til kommentar
Videoannonse
Annonse

Ja, den er overflødig. Ikke bruk denne funksjonen. Se heller manualsida, der anbefaller de en quote_smart-funksjon

// Quote variable to make safe
function quote_smart($value)
{
  // Stripslashes
  if (get_magic_quotes_gpc()) {
      $value = stripslashes($value);
  }
  // Quote if not integer
  if (!is_numeric($value)) {
      $value = "'" . mysql_real_escape_string($value) . "'";
  }
  return $value;
}

Lenke til kommentar

Er ikke helt med på hva du mener, men etter hva jeg har fattet bør man bruke mysql_real_escape_string() og ikke stripslashes(), Testet litt nå for å se hva som er raskest, og det ser ut til at is_numeric() er raskere, så det lønner seg å bruke den der det er mulig :)

Lenke til kommentar
Ja, den er overflødig. Ikke bruk denne funksjonen. Se heller manualsida, der anbefaller de en quote_smart-funksjon

// Quote variable to make safe
function quote_smart($value)
{
  // Stripslashes
  if (get_magic_quotes_gpc()) {
      $value = stripslashes($value);
  }
  // Quote if not integer
  if (!is_numeric($value)) {
      $value = "'" . mysql_real_escape_string($value) . "'";
  }
  return $value;
}

5301052[/snapback]

Hvorfor blir det overflødig i dette tilfellet? Det er faktisk raskere å sjekke om verdien er et tall og så ev. kjøre spørringen. Det du har der sjekker om det ikke er tall, legger i såfall på ' foran og bak og kjører alltid spørringen.

Lenke til kommentar

Mulig vi misforstår hverandre. mysql_real_escape_string er overflødig fordi du ikke skal escape numeriske verdier. Derfor kan den droppes. Bruker du quote_smart, kan du la være å sjekke verdiene, og bare bruke de i form av quote_smart($verdi) . Dette fordi quote_smart legger til anførselstegn forran verdiene viss det er en string og i tillegg kjører mysql_real_escape_string på den. Ettersom numeriske verdier ikke kan forårsake noe «bad» i sql-spørringa, trenger de altså ikke escapes.

 

edit: når det gjelder hastighet: Dette er uvesentlig. Hastighetsforskjellene er ekstremt få.

Endret av dabear
Lenke til kommentar

Jeg veit da eksakt hva den funksjonen gjør. Mitt poeng er bare at den ikke har noen hensikt i denne sammenhengen. Trådstarter ønsker åpenbart bare numriske verdier og da holder det lenge med is_numeric

 

Edit: Tror jeg skal lese litt mer nøye det første innlegget.

 

Altså, ja det er unødvendig, og den quote_smart-greia har lite for seg hvis man tenker seg litt om. Blir det samme om man bruker den eller legger til ' i spørringen. Eneste er for å sikre seg "mot" magic_quotes

Endret av Ernie
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...