Avatar billede haggar Nybegynder
14. oktober 2007 - 21:29 Der er 11 kommentarer

PHP5 og MySQL hjælp

Jeg har lige opgraderet min server fra PHP4 til PHP5 og fra MySQL 1.3 til 2.0

Jeg har endelig fået min PHP side med SQL base op og køre igen, men når jeg prøver at trække noget ud fra den får jeg bare intet resultat. :(

Eks. hvis jeg pejer på et link giver jeg den et ID
http://10.0.0.100/lister/php/findvare.ph...


i findvare.php prøver jeg så at trække det id ud

$result = mysql_query("SELECT * FROM oversigt WHERE 'id'=".$_REQUEST["id"].";");

og køre det over i nogle særskilte variabler

$data1 = htmlentities(mysql_result($result, 0, "titel"));

Nu burde jeg kunne echo $data1; men der kommer bare intet frem ...

Det virkede i Apache version 1.3 med PHP4 men hvorfor ikke i Apache 2.0 og PHP5 ??

Mangler der noget?
Avatar billede nielle Nybegynder
14. oktober 2007 - 22:00 #1
Prøv at ændre:

$result = mysql_query("SELECT * FROM oversigt WHERE 'id'=".$_REQUEST["id"].";");

til:

$result = mysql_query("SELECT * FROM oversigt WHERE 'id'=".$_GET["id"].";");
Avatar billede nielle Nybegynder
14. oktober 2007 - 22:01 #2
Du er sikkert røget ind i at sikkerhedsindstillingerne er blevet skærbet i de nyere versioner af PHP.
Avatar billede Slater Ekspert
14. oktober 2007 - 22:05 #3
..Hvilket ikke nytter noget, når man skriver så hamrende usikker kode, som det her.
Det er at tigge om at blive hacket, at smide sin $_GET variabel direkte ind i en SQL query.

Derudover skal der ikke semikolon i mysql_query. Det gør den selv.
Avatar billede erikjacobsen Ekspert
14. oktober 2007 - 22:10 #4
Helt og aldeles enig med viperine. Det er skod-kode, der alene kan bruges til interne tests, og ikke, aldrig, nogensinde, skal ligge tilgængelig på Internettet.

Men "MySQL 1.3 til 2.0" forstår jeg ikke. Den nyeste MySql-version hedder 5-noget. Man kan ikke bruge en version 2 til noget i dag.
Avatar billede gammelhat Nybegynder
14. oktober 2007 - 22:20 #5
der er vist også ret stor forskel på 'id' og `id`
Avatar billede haggar Nybegynder
14. oktober 2007 - 22:54 #6
Var også mig som har skrevet lidt forkert.. jeg kører ikke med MySQL 2.0 men den nyeste 6.0  det var apachen der er opgraderet fra 1.33 til 2.0x

Jeg har fået den til at trække data ud nu, så det er godt nok, men der er meget kode der stadig ikke virker eftersom der nok er ændret en del i PHP releasen fra v.4 til v.5

Sku meget tilrettelse :(  øv øv
Avatar billede erikjacobsen Ekspert
14. oktober 2007 - 23:17 #7
Ok mht Apache - det kunne jeg msåke også have læst mig til. Nej, der er ikke æmdret meet fra PHP4 til 5. Kun hvis man har brugt metoder fra mega-gamle PHP-versioner, og ikke har en dyt forstand på programmering og sikkerhed, så er der nok en del at rette. Og godt det samme. PHP har fået et pletter ry for gamle fejltagelser, der tillod skod-programmering. Det eneste problem er, at man sagtens kan indstille PHP5 til det samme.
Avatar billede haggar Nybegynder
15. oktober 2007 - 00:57 #8
Nu begynder htaccess også at drille, har endelig fået den til at spørge efter brugernavn og kode men når jeg taster den rigtige kode ind, spørger den efter det 3 gange og så får man bare fejlen

Authorization Required
This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.

ARGHH...
Avatar billede nielle Nybegynder
15. oktober 2007 - 11:12 #9
For lige at være lidt konstruktiv i stedet for bare at sige at det er skodkode (hvilket det er!)...

Den sikre version af din oprindelige kode ser sådan ud:

$id = $_GET["id"];
$id = mysql_real_escape_string($id);
$result = mysql_query("SELECT * FROM oversigt WHERE id=$id") or die(mysql_error());

Denne kan evt. udvides med et par linjer som verifisere om $id faktisk er et heltal, eller om den er noget andet.

Når koden lægges op på webhotellet bør det iøvrigt overvejes om PHP skal have lov til at udskrive fejlbeskeder direkte til skærmen. Dette vil nemlig give oplysninger som en hacker potentielt ville kunne bruge.

Det der gør din oprindelige kode så risikabel er, at du kritikløst tager imod data som kommer fra klienterne og smider den ind i din SQL kode. Ikke alle dine besøgende er rigtige brugere - nogen af dem er hacker-typer som har interesse i at kunne overtage din side eller at kunne udtrække data om dine brugere (f.eks. emailadresser til spam).

Joe-the-Hacker kan gøres alle mulige ting som aldrig burde forekomme ved almindelig brug af din side. I dette tilfælde er det $_GET["id"] som er det mulige angrebspunkt. Der er ingen garanti for at Joe faktisk levere et korrekt id eller noget andet som f.eks.:

id: 666;DROP TABLE oversigt;--

Indsat ukritisk i din SQL-streng bliver dette til:

"SELECT * FROM oversigt WHERE id=666;DROP TABLE oversigt;--"

Resultat: din tabel bliver slettet...

Angrebstypen kaldes for SQL injection og det er noget enhver programmør som bevæger sig ud på Internettet bør kende til:

http://en.wikipedia.org/wiki/SQL_injection

Funktionen mysql_real_escape_string() er en mulig måde at beskytte sig imod den slags:

http://dk2.php.net/mysql_real_escape_string

Forresten kan din kode også fejle ved helt legitim brug, hvis du ikke bruger disse teknikker. Prøv f.eks. at oprette en bruger med navnet "Scarlett O'Hara" og se hvad der så sker.

BTW ';'-tegnet i den oprindelige er ikke nogen fejl som sådan - det er dog totalt overflødigt i dette tilfælde.
Avatar billede nielle Nybegynder
22. oktober 2007 - 19:00 #10
Er du kommet vidre med denne her?
Avatar billede nielle Nybegynder
29. oktober 2007 - 18:23 #11
??
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