taskmgr >> I expnet's eksempel, hvor array-kaldet ligger i en delimiteret streng, er det ligegyldigt. Trækker man det derimod udenfor strengen, har du helt ret i, at man bør bruge gåseøjne.
Om man vælger expnet's måde eller din, er kun et spørgsmål om 'kosmetik' og kodevaner ;o)
man må ALDRIG bruge inputs direte i SQL, det kan misbruges til sql-injection. Lav som min. addslashes() eller lign. selvom det er en talværdi. Bare for en sikkerheds skyld.
alister_crowley >> Hvad er dog det for noget vrøvl? Vis mig lige en SQL-injection via en select ;o)
I helt andre situationer kan man lave SQL-injections ... dér kan det være et sikkerhedshul. Der kan også tænkes andre situationer, hvor det kan gå hen og blive problematisk - men næppe her.
Vi er ved dit evige problem, alister ... dine kategoriske og ofte fejlagtige udtalelser ;o)
Tjek først om du har magic_quotes_gpc sat til på serveren. Hvis ja, så sker det automatisk på GPC data.
Hvis denne giver 1, så er magic_quotes_gpc sat til: <?php echo get_magic_quotes_gpc(); ?>
Hvis den giver 0, skal du bruge noget lig: $mid = addslashes($_GET['mid']); $sql = "SELECT Vare_menu_nr ,Vare_menu_navn ,Vare_image FROM menu where Vare_menu_nr = $mid ORDER BY Vare_menu_nr";
ole: Det har du naturligvis ret i, men jeg fik i sin tid selv dårlige vaner af at se den slags :)
Det er op til dig , om du vil lave usikker kode eller ej, jeg er faktisk ligeglad. Jeg betragter det som usikkert, og det gør de fleste andre PHP nørder på IRC netværkene også. Jeg synes ikke du laver så meget andet lige pt. end at brokke dig over xhtml, og at flame folk.
Hvordan skulle jeg kunen lave en sql-injektion, jeg kan ikke, fordi jeg ikek vil lære ulovlige ting.
jpj3
addslashes() laves som f.eks. $value = addslashes($anothervalue); I dette tilfælde ville det være smarteste at checke om $_GET['mid'] er et tal. Dette kan gøres med f.eks.
if(preg_match("/[0-9]/",$_GET['mid'])) { // sql } else { echo "den valgte mid findes ikke"; }
Det er smart at bruge addslashes(), hvis de ikke bliver sat automatisk med get_magic_quotes_gpc(), måske ikke nødvendigvis i dette tilfælde, men de skader ikke. Du kan tilføje dem sådan:
I de fleste moderne opsætninger er addslashes() unødvendig ;o)
taskmgr >> Tag endelig ikke fejl ... min anale rynketråd krymper sig i besynderlige spasmer, når jeg ser PHP-variabler i strenge. Jeg skriver selv på helt samme måde, som du ... det var blot en helt principiel betragtning :)
alister_crowley >> det er _umuligt_ at indætte noget i en select - det er der vist ikke mange PHP-folk, der ikke ved. Jeg er sikker på, du ikke har forstået, hvad 'php-nørderne på IRC' skriver til dig ;o)
Jeg brokker mig ikke over XHTML og jeg flamer ikke folk.
Jeg påpeger, at XHTML stort set er ubrugeligt, hver gang jeg møder én, der fejlagtigt tror det modsatte. Derudover påpeger jeg, hvergang folk skriver noget vrøvl, der kan bibringe en fejlagtig opfattelse.
Hvis du opfatter det, somom jeg ikke laver andet end at brokke mig over XHTML og flame folk, kunne det måske hænge sammen med, der bliver skrevet mere vrøvl i de spørgsmål, du deltager i end i andre. Jeg - der jo ved, hvad jeg skriver i de spørgsmål, jeg deltager i - kan fortælle dig, det ikke hænger sådan sammen :)
alister >> Hvis du vil citere manualen, så gør det dog korrekt. Der står jo netop også om den ene afvigelse, der er fra reglen ... nemlig at kaldet står indenfor en delimiteret streng. Præcis som tilfældet var her.
Dette er helt gangbart: $s = "khkjhh $_GET[foo] jilkjlkj"; - chack manualen igen ;o)
Note: To reiterate, inside a double-quoted string, it's valid to not surround array indexes with quotes so "$foo[bar]" is valid. See the above examples for details on why as well as the section on variable parsing in strings.
// The following is okay as it's inside a string. Constants are not // looked for within strings so no E_NOTICE error here print "Hello $arr[fruit]"; // Hello apple
1. Ja, det er noget vrøvl. Du kan ikke lave SQL-injection i en select, som den, der er i dette spm. med de metoder, han anviser.
2. Fra http://dk2.php.net/manual/en/language.types.array.php "Note: To reiterate, inside a double-quoted string, it's valid to not surround array indexes with quotes so "$foo[bar]" is valid. See the above examples for details on why as well as the section on variable parsing in strings."
Jeg er nu ikke så sikker på at den: UNION SELECT ikke kan misbruges, men her hjælper addslashes ikke. Derimod skal man sætte apostroffer om '$id' selvom det er et tal.
alister_crowley, kære ven ... det er jo netop dét, der pisser mig af i voldsom grad ... og dét, jeg hele tiden brokker mig over: Ekstremt mange af de tutorials, du finder på nettet, er hamrende fejlfyldte. Det er yderst sjældent, forfatterne har gidet sætte sig ind i emnet, der skrives om.
Det absolutte punkt ét for at kunne tilegne sig viden på nettet er, at man indhenter info fra mange steder (det gælder også alle andre steder end WWW). Dernæst er det en god ting altid at efterprøve eksempler.
Ja, det er god kodeskik, ikke at bruge uvalideret bruger-input, men ikke nødvendigvis af de årsager, du henviste til ;o)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.