Gå til innhold

sikkerhet med is_numeric()


Anbefalte innlegg

Skrevet

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?

Videoannonse
Annonse
Skrevet

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;
}

Skrevet

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 :)

Skrevet
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.

Skrevet (endret)

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
Skrevet (endret)

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

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...