Avatar billede knaldebang Nybegynder
29. april 2005 - 14:07 Der er 29 kommentarer og
1 løsning

Overførsel af URL.

Hey;

Jeg vil blot høre, om nogen herinde kan fortælle mig, hvordan jeg får overført hele url'en til en side?

Jeg har en side med en formular, og der vil jeg gerne have det sådan, at når man trykker submit, skal den url der er på siden med formularen (med alle GET-variabler inkluderet) sendes videre til den side der bliver kaldt med formularen.

Nogen der kan hjælpe?
Avatar billede dennismp Nybegynder
29. april 2005 - 14:09 #1
<form...

<input name="url" value="<?=htmlspecialchars($_SERVER['QUERY_STRING'])?>">

</form>
Avatar billede sone Nybegynder
29. april 2005 - 14:10 #2
så laver du et input-felt i formularen hvor du skriver din URL - så kommer dem med når du klikker Submit.
Avatar billede knaldebang Nybegynder
29. april 2005 - 14:21 #3
hvad gør htmlspecialchars-funktionen helt nøjagtigt?
Avatar billede dennismp Nybegynder
29. april 2005 - 14:24 #4
Helt nøjagtigt: http://dk.php.net/htmlspecialchars

kort fortalt erstatter den " med &quot; o.lign
Avatar billede knaldebang Nybegynder
29. april 2005 - 14:34 #5
Er den bedre end htmlentities eller hvordan? Så vidt jeg kan se erstatter den alle specielle html-tegn, hvor htmlspecialchars kun erstatter nogle få...
Avatar billede dennismp Nybegynder
29. april 2005 - 14:46 #6
http://dk.php.net/htmlentities

"This function is identical to htmlspecialchars() in all ways, except with htmlentities(), all characters which have HTML character entity equivalents are translated into these entities."

Det må du så vurderer om det er smarter.

(Kan du ikke læse engelsk, siden du ikke selv slår det op?)
Avatar billede knaldebang Nybegynder
29. april 2005 - 14:52 #7
Jo, kan godt læse engelsk, og har også læst det du citerer. Min erfaring inden for php er dog forholdsvis lille, og derfor håbede jeg, at du måske havde en større erfaring der fortalte dig, hvad der viste sig at være den bedste løsning:)
Avatar billede dennismp Nybegynder
29. april 2005 - 15:00 #8
Jeg vil mene at htmlspecialchars() nok er bedst i denne situation. Hvis man man har en URL i stil med
index.php?navn=Møllegaard

så er det ikke så hensigtsmæssigt at gemme det som
index.php?navn=M&oslash;llegaard

For det er jo ikke det URLen er.

Det vigtigste er at få lavet " om til &quot; da det kan øldelægge dit <input>-tag. Det er nok sjældent at man vil bruge en URL med " i, men forstil der en ondsindet bruger der gerne vil vise noget på din side - det ville han kunne gøre hvis du ikke sørger for at køre det igennem htmlspecialchars/htmlentities.

Lidt paranoia er altid sundt :)
Avatar billede knaldebang Nybegynder
29. april 2005 - 15:09 #9
Hehe okay, ja jeg er også nervøsover sikkerheden på min side, i og med det er første gang jeg laver en side helt fra bunden:)
Avatar billede dennismp Nybegynder
29. april 2005 - 15:50 #10
Det skal jo prøves. Men klassiske fejl er:

At man stoler på brugeren. Dvs, cookies kan ændres. Forms og URLs bliver ændret. Dvs dit skjulte id i formen kan du ikke antage er rigtigt. Vær sikker på at dine ID'er er tal. Mistænk altid data fra brugeren.

Test fx dine URLs og forme med hvordan de reagerer på '-tegnet. (hvis variablerne bruges til SQL).
Bruge $_SESSION (disse data gemmes jo på serveren) over $_COOKIES (som gemmes hos brugere - så skal vi være forsigtig) så vidt muligt (det kan man ofte, men til autologin er session ikke til megen nytte).

Prøv at skrive html ind i dine forms. Hvis en laver et alert() javascript og submitter det og hvis du ukritisk viser det, vil alle folk kunne se den alert. Og det er så stadig relativt harmløs. Men javascript kan man meget som kan bruges til ondeting<tm> :)

Det var lige hvad jeg kunne komme på. Men ellers er det jo bare med at gøre sig sine erfaringer. Alle laver jo fejl, så det er bare med at komme igang :)
Avatar billede knaldebang Nybegynder
30. april 2005 - 18:09 #11
Dvs. at alt input, såvel indlæg i forum, som artikler og andet fra brugeren, bør køres i gennem htmlspecialchars som minimum?

Forstår ikke helt det du mener med hvordan mine url's og formularer reagerer på '-tegnet.
Avatar billede dennismp Nybegynder
30. april 2005 - 18:38 #12
Nej,

du bør tænke dig om hver gang du har noget indput fra brugeren. Hvis du fx viser et tekstfelt uden at tjekke det, kan det misbruges. Det kan htmlspecialchars/htmlentities/strip_tags o.lign gøre noget ved. Ofte er htmlspecialchar en god ven :)

Fx ved du at id er et tal, så kan du jo bruge ctype_digit for at tjekke efter, eller bruge:
$id = intval($_GET['id']);

så er du altid sikker på at $id er et tal.

'-tegnet er bare en primitiv måde at se om der er en mulig sql-injection. Forstil dig:

mysql_query("DELETE FROM articles WHERE id = {$_GET['id']}") or die(mysql_error());

normalt vil dette jo slette en række, når fx: site.com/delete.php?id=2 kaldes. Da SQL'en vil se sådan her ud: "DELETE FROM artciles WHERE id = 2". Og det er jo hvad vi ønsker.

Lad os så antage at jeg vil gøre livet surt for dig, så kan jeg skrive:
site.com/delete.php?id=1+OR+1=1

Så vil SQL'en blive til:
"DELETE FROM artciles WHERE id = 1 OR 1=1"

Da 1 er lig med 1, vil sql slette alle rækker i databasen. Det var jo ikke helt meningen. Det kan ske hvis man ikke tjekker ordenligt på parameteren. Kan du se problemet?

'-tegnet kan du (selvom det er primitivt) teste om sql'en fejler. Kalder vi
site.com/delete.php?id=1'

bliver sql'en til:
"DELETE FROM artciles WHERE id = 1'"

og så vil sql'en fejle. Det må helst ikke ske.

Håber det giver mening :)
Avatar billede knaldebang Nybegynder
30. april 2005 - 18:53 #13
Forstår indtil du skriver:

'-tegnet kan du (selvom det er primitivt) teste om sql'en fejler. Kalder vi
site.com/delete.php?id=1'

bliver sql'en til:
"DELETE FROM artciles WHERE id = 1'"

og så vil sql'en fejle. Det må helst ikke ske.
Avatar billede dennismp Nybegynder
30. april 2005 - 19:51 #14
Hvad forstår du ikke? At det fejler?
Avatar billede kongfjong Nybegynder
30. april 2005 - 20:19 #15
Jo forstå sådan set godt, at "DELETE FROM artciles WHERE id = 1'" fejler, forstår bare ikke helt hvad du mener med sætningen: '-tegnet kan du (selvom det er primitivt) teste om sql'en fejler
Avatar billede dennismp Nybegynder
30. april 2005 - 20:27 #16
Hvis du bruger '-tegnet i de parametre til dine scripts, som du ved bliver brugt iforbindelse med sql, så vil du fremprovokerer en SQL fejl, da det giver et ugyldigt SQL statement - hvis det ryger direkte ind i din sql uden at blive "behandlet" - dvs escaped eller lign.
Avatar billede knaldebang Nybegynder
30. april 2005 - 20:38 #17
og det må det ikke eller hvordan? Eller er det kun, hvis jeg har url's hvor '-tegnet SKAL indgå at jeg skal tage hensyn tild et, eller hvordan?
Avatar billede knaldebang Nybegynder
30. april 2005 - 20:45 #18
Eller sal jeg sørge for, at '-tegnet ikke kan bruges af en hacker, når det er get-variabler der skal bruges i sql-querys?
Avatar billede dennismp Nybegynder
30. april 2005 - 20:54 #19
Nej du misforstår mig lidt.

Hvis SQL'en fejler pga et '-tegn, så er der et sikkerhedsproblem generelt. Det "smarte" ved at teste med ' er at du får en fejl i sqlen. Hvis du sætter a'er ind, vil mysql ikke normalt melde fejl - men så vil du ikke se det ligeså tydeligt at a'erne er kommet ind i dit sql statement. Ellers glem det med '-tegnet. Det vigtigste er bare at mistænke brugeren for at være en badguy, gør du det, så er du ikke helt tabt bag en vogn :)
Avatar billede knaldebang Nybegynder
30. april 2005 - 20:56 #20
ahhhh nu tror jeg ved hvad du mener:D Du vil have mig til at køre get-variabler der skal være tekst igennem fx html-entities lige som man køre heltalts get-variabler igennem intval()?
Avatar billede knaldebang Nybegynder
30. april 2005 - 20:58 #21
okay, jeg tror jeg forstår: Du vil have mig til at sikre, at en query ikke fejler fordi der bruges '-tegnet i en getvariable?
Avatar billede dennismp Nybegynder
30. april 2005 - 20:58 #22
Ja, med mindre der er en god grund man ikke vil have de checks. (Det er nok sjældent)
Avatar billede dennismp Nybegynder
30. april 2005 - 21:02 #23
Jep præcist. Men bare husk på, at selvom det ikke fejler, så begyder det ikke at der kan være problemer. Men bare det du er opmærksom på disse aspekter gør at din kode bliver sværere at bryde iforhold til mange andre php programmører :)
Avatar billede knaldebang Nybegynder
30. april 2005 - 21:03 #24
Ok, så mig fatte:D Tak for din tålmodighed:D

Så vil jeg køre alle get-variabler der skal være strenge, igennem htmlspecielchars() inden de bliver sat ind i query'en:)
Avatar billede knaldebang Nybegynder
30. april 2005 - 21:03 #25
Kom endeligt med et svar:)
Avatar billede dennismp Nybegynder
30. april 2005 - 21:09 #26
Det er længe siden jeg fik point for dette spørgsmål, så det kan jeg ikke :)
Avatar billede knaldebang Nybegynder
30. april 2005 - 21:16 #27
LOL:D Ja godt jeg er opmærksom på mit eget spg:D Men mange tak for hjælpen:)
Avatar billede knaldebang Nybegynder
30. april 2005 - 21:19 #28
Ville det egentligt ikke være mest optimalt, at lave en funktion, der fjerne alle uønskede tegn fra en given streng, og så kalde den på alle get-variabler der skal være strenge?
Avatar billede dennismp Nybegynder
30. april 2005 - 21:48 #29
Det kan du sagents, hvis du kan definere uønskede tegn :). Men ja, at lave et par funktioner kunne være en måde at gøre det nemt på
Avatar billede knaldebang Nybegynder
30. april 2005 - 21:49 #30
OK:)
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

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