Gå til innhold

Informasjon over flere sider via URL?


Anbefalte innlegg

Dette burde være veldig enkelt, men jeg finner ikke svar på det og har lett en stund nå...

Hvordan er det egentlig man bærer informasjon til php-sider gjennom URLen? (Jeg tenker på linker som ser omtrent slik ut: http://ettellerannet.php?navn=odin) Hvordan kan jeg i den nye siden hente opp at "navn" er "odin"?

 

Kan noen peke meg videre til et sted hvor det står hvordan dette funker?..

 

Takk!

Lenke til kommentar
Videoannonse
Annonse

Men - Med tanke på sikkerhet bør du aldri gjøre det på denne måten. Dersom du ønsker at brukeren kun skal skrive inn bokstaver (som i dette eksempelet), bør du sikre variablen med:

 

<?php $name = htmlentities($_GET['navn']); ?>

 

Likeså dersom du kun trenger (hele) tall:

 

<?php $number = (int) $_GET['nummer']; ?>

 

Det å lære seg å sikre brukerinput fra dag en kan være en svært god skikk, ettersom slikt fort blir en vane (og kan føre til dårlig sikkerhet ved senere tidspunkt). :thumbup:

Lenke til kommentar
<?php $name = htmlentities($_GET['navn']); ?>

Dette blir da bare tull... Det finst ikkje ein einaste god grunn til å kjøre variablene dine gjennom htmlentities, med mindre du faktisk har behov for at f.eks < blir til <

 

// Hent variabelen
$name = $_GET['navn'];

// Vist vi skal bruke den i ein sql spørring må vi sørge for å 'escape'
$name = mysql_real_escape_string($name);
$res = mysql_query('.... spørring ....');

// Vist vi skal skrive variabelen tilbake til brukeren er det viktig å fjerne uønsket html, hindrer xss
echo striptags($name);

// Vist du skal tillate noe html kan det vere lurt å filtrer bort alt annet
echo striptags($name, '<p><strong><em>');

// Ønsker du å ta vare på spesielle html tegn, slik at webleseren ikkje leser dei bruker du htmlentities
echo htmlentities($name);
  // Vist name var X > 2 så vil det no stå X > 2 i webleseren

Endret av Runar0
Lenke til kommentar

Runar0: Det er da like greit å escape html tags som å strippe det helt.. Du kjører jo selv striptags, men den fjerner jo alt som kan minne om tags, mens htmlentities faktisk viser nøyaktig det brukeren skriver men uten farlige sideeffekter.. Grunnen til at det kan være praktisk å beholde full output er for eksempel dersom brukeren ønsker å printe ut html-kode for å forklare noen hvordan de kan kode noe..

 

Viktig å merke seg at det ikke bare er $_GET en burde escape, men også alt av ting som brukere tidligere har lagt inn slik som innhold fra databaser.. Selv om du har brukt mysql_real_escape_string for å legge inn, så sikrer ikke det mot XSS når du skal printe ut igjen ;)

Lenke til kommentar

Nå sa eg ingen ting på at du kan bruke htmlentities på bruker data før du printer det tilbake til brukeren, men det er ikkje noe god ide og konsekvent kjøre $_GET data (eller andre brukerdata) igjennom htmlentities for å sikre den. Det eg skulle fram til er at du må bruke den funksjonene som faktisk er beregna til den situvasjonen du er i.

 

La oss si at du lager eit bruker system der du tillater a-zA-Z0-9_<> i brukernavnet, og ei maks lengde på 10 bokstaver. Vist du da bruker htmlentities på all data som kommer i fra brukeren så vil ikkje <Testuser> bli godkjent som eit brukernavn fordi den faktiske verdien er <Testuser>.

 

Så kjernen av det eg prøver å forklare er at du må bruke dei metodene du trenger, du escaper før database innsetting, du bruker htmlentities eller strip_tags vist dataen kan innehold html som du ønsker og fjerene eller uskadeligjøre (dette kan og godt skjer i forbindelse med database innsetting så slipper du det når du henter det ut igjen)

Lenke til kommentar
Nå sa eg ingen ting på at du kan bruke htmlentities på bruker data før du printer det tilbake til brukeren, men det er ikkje noe god ide og konsekvent kjøre $_GET data (eller andre brukerdata) igjennom htmlentities for å sikre den. Det eg skulle fram til er at du må bruke den funksjonene som faktisk er beregna til den situvasjonen du er i.

 

Tror nok htmlentities() er et av de beste alternativene i denne situasjonen fordi:

 

1. Brukeren vet ikke hvordan man behandler $_GET[] - variabler.

2. Grunnet punkt en, er jeg rimelig sikker på at det ikke skal skrives til en database i dette eksemplet.

3. htmlentities gir god sikkerhet og er enkelt å forstå for en nybegynner (istedenfor et regulært uttrykk).

4. htmlentities gjør at navnet brukeren skriver inn vises riktig uansett hvilke tegn som skrives inn.

 

Men - Som du er inne på i tråden, er det riktignok en dårlig løsning dersom bruker skal kun skrive inn tall og bokstaver, eller dersom brukerinput skal benyttes til spesifikke oppgaver (som jo er det mest vanlige).

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