Avatar billede jpj3 Nybegynder
18. marts 2005 - 23:27 Der er 31 kommentarer og
1 løsning

Data fra adr linien

Hej

Jeg har følgende url
http://website.dk/vare_underside.php?mid=6
Hvordan får jeg fat i mid=6 fx. så jeg kan bruge det til at få vist den rigtige varegruppe.

Det skal sættes ind i denne kode.

    $sql  = "SELECT Vare_menu_nr ,Vare_menu_navn ,Vare_image FROM menu ORDER BY Vare_menu_nr";
    $qh = mysql_query( $sql ) or die( "Fejl 1: " . mysql_error() . "<br><br>$sql" );
    if ( mysql_num_rows( $qh ) > 0 )
Avatar billede expnet Seniormester
18. marts 2005 - 23:31 #1
$sql  = "SELECT Vare_menu_nr ,Vare_menu_navn ,Vare_image FROM menu where Vare_menu_nr = '$_GET[mid]' ORDER BY Vare_menu_nr";
Avatar billede detox Nybegynder
18. marts 2005 - 23:31 #2
Du henter den ud med: $_GET['mid']
Avatar billede taskmgr Nybegynder
18. marts 2005 - 23:34 #3
Husk quotes omkring string indexes, som detox skriver:
(...) Vare_menu_nr = ".$_GET['mid']." (...)
Avatar billede olebole Juniormester
18. marts 2005 - 23:46 #4
<ole>

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)

/mvh
</bole>
Avatar billede alister_crowley Nybegynder
18. marts 2005 - 23:51 #5
og begge metoder er lige usikre.

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.
Avatar billede jpj3 Nybegynder
18. marts 2005 - 23:58 #6
hvordan laver man addslashes()??
Avatar billede olebole Juniormester
19. marts 2005 - 00:01 #7
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)
Avatar billede jpj3 Nybegynder
19. marts 2005 - 00:03 #8
Dvs. det er ikke nødvendigt med addslashes()???
Avatar billede taskmgr Nybegynder
19. marts 2005 - 00:04 #9
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 :)
Avatar billede expnet Seniormester
19. marts 2005 - 00:06 #10
Du skal ikke bruge addslashes()

men et hul kunne være at en gik op i adresselinen og skrev et mid forkendt og så vil din side muligvis fejle det er det jeg forstår ved sikkerhedshul
Avatar billede alister_crowley Nybegynder
19. marts 2005 - 00:07 #11
olebole:

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";
}
Avatar billede detox Nybegynder
19. marts 2005 - 00:07 #12
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:

$val = get_magic_quotes_gpc() ? $val : addslashes($val);
Avatar billede olebole Juniormester
19. marts 2005 - 00:09 #13
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  :)
Avatar billede jpj3 Nybegynder
19. marts 2005 - 00:09 #14
Hvis der skives et mid forkert vil siden blive vist og den skriver at der ikke er nogen menu. Og vare gruppe billed bliver ikke vist.
Avatar billede jpj3 Nybegynder
19. marts 2005 - 00:13 #15
expnet -> smider du et svar. Du var først og det var den løsning jeg har valgt.
Avatar billede alister_crowley Nybegynder
19. marts 2005 - 00:15 #16
btw. olebole

expnets løsning er faktisk forkert ifølge php manualen.

foo[bar] er IKKE korrekt
foo['bar'] er korrekt

såå... hvem snakker fejlagtigt nu
Avatar billede olebole Juniormester
19. marts 2005 - 00:17 #17
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  :)
Avatar billede olebole Juniormester
19. marts 2005 - 00:19 #18
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)
Avatar billede alister_crowley Nybegynder
19. marts 2005 - 00:21 #19
1 hit på google efter "sql-injection in select" retunere

http://www.imperva.com/application_defense_center/glossary/sql_injection.html

100% løgn, eller ?
Avatar billede alister_crowley Nybegynder
19. marts 2005 - 00:35 #20
http://se2.php.net/manual/en/language.types.array.php#language.types.array.foo-bar

Jeg vil meget gerne se hvor du læser det med "en delimiteret streng"
et par google søgninger retunere heller intet som har med php at gøre...
Avatar billede detox Nybegynder
19. marts 2005 - 00:36 #21
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.

klippet fra:
http://dk2.php.net/manual/en/language.types.array.php
Avatar billede taskmgr Nybegynder
19. marts 2005 - 00:39 #22
Det nævnes faktisk flere gange...

// 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
Avatar billede olebole Juniormester
19. marts 2005 - 00:39 #23
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."
Avatar billede alister_crowley Nybegynder
19. marts 2005 - 00:44 #24
fint, mit engelsk som har klokket i det denne her gang.

Jeg havde forstået det som det hele handlede om konstanter hvis der ikke var '' uden om.
Så har jeg da lært lidt i dag.

Hvis de artikler man finder på nettet (specielt dem som er højt ranket af google) ikke passer så er det jo også svært at tilpasse sig korrekt viden.

Men det er STADIGVÆK usikkert at bruge inputs direkte i sql, så bare ikke lige i en SELECT åbenbart...
Avatar billede detox Nybegynder
19. marts 2005 - 00:51 #25
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.
Avatar billede olebole Juniormester
19. marts 2005 - 00:52 #26
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)
Avatar billede olebole Juniormester
19. marts 2005 - 00:54 #27
detox >> det er korrekt - men ikke i en helt simpel select som her  :)
Avatar billede detox Nybegynder
19. marts 2005 - 01:03 #28
Med denne url:

http://localhost/test.php?id=123' UNION SELECT titel, name FROM aform WHERE 1='1

kan jeg da hive titel og name ud fra tabellen 'aform' med denne query:

    $ins = $_GET['id'];
    $query = "SELECT navn, andet FROM tabel WHERE id='$ins' ORDER BY navn";

hvis jeg vel at mærke slår magic_quotes fra. Derimod ikke med magic_quotes slået til, men der virker dette:

http://localhost/test.php?id=123 UNION SELECT titel, name FROM aform

    $ins = $_GET['id'];
    $query = "SELECT navn, andet FROM tabel WHERE id=$ins ORDER BY navn";
Avatar billede olebole Juniormester
19. marts 2005 - 01:14 #29
yups ... men ikke hvis du escape'er $ins og har magic_quotes slået til. Det første er alm. kodeskik og det andet er som oftest tilfældet  :)
Avatar billede jpj3 Nybegynder
26. marts 2005 - 13:11 #30
expnet -> smider du et svar. Du var først og det var den løsning jeg har valgt.
Avatar billede expnet Seniormester
26. marts 2005 - 13:29 #31
jpj3 -> takker og håber du ku bruge det takker for point
Avatar billede jpj3 Nybegynder
26. marts 2005 - 20:20 #32
Det kunne jeg.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester