27. januar 2011 - 11:51Der er
21 kommentarer og 1 løsning
Mysql Injection - min side er blevet hacket
Hej.
Er der nogle af jer der har styr på mysql injection, som kan give lidt assistance? Min side er blevet hacket og det har kostet både mig og min udbyder tid og penge, hvilket er meget frustrerende da jeg kun driver min side for sjovt.
Så håber der er en der kan hjælpe.
Hvis der er nogle der har styr på det, hvad skal i så se/vide?
når du arbejder med MySQL så sørg for altid at benytte prepared statements - alle mulige og umulige PHP funktioner kan selvfølgelig også hjælpe, men det sikreste vil altid være at snakke sammen med databasen på den rigtige måde, i dette tilfælde altså prepared statements.
Synes godt om
Slettet bruger
27. januar 2011 - 12:24#6
F:eks. denne her, hvordan får jeg den ændret så?
$query="SELECT * FROM liste WHERE nyhed = 3 AND kategori <> 'nyheder' ORDER BY tid DESC LIMIT 16"; $result=mysql_query($query) or die(mysql_error());
Wow. Det havde jeg slet ikke set. Vil da i hvertfald også anbefale dig at få gjort noget ved. Og husk nu, luk ikke bare spørgsmål ved at acceptere dig selv hvis der er nogen der har hjulpet dig.
Synes godt om
Slettet bruger
27. januar 2011 - 13:57#10
Det er fra gamle dage det hele... Har også været i fuld gang med at lukke mange af dem, men det tager laaang tid.. Var ikke klar over de skulle lukkes i lang tid, før en gjorde mig opmærksom på det.. Og der havde jeg brugt eksperten i lang tid desværre. :-) Så er godt klar over det og tager også lidt efterhånden, så bare rolig jeg gør noget for det. (I stedet for bare at lukke og oprette en ny konto).
Lukker dem heller ikke selv, hvis andre har hjulpet.
Synes godt om
Slettet bruger
27. januar 2011 - 14:03#11
Dvs. det er følgende jeg skal have kigget på? Altså hvor jeg bruger GET...
$connection = mysql_connect($host,$user,$pass); mysql_select_db("$db"); $newid= $_GET[id]; $query = mysql_query("UPDATE listen SET klik = klik + 1 WHERE id = $_GET[id]"); $query="SELECT * FROM listen where ID=$newid"; $result=mysql_query($query) or die(mysql_error()); echo "<tablel>\n"; while($row=mysql_fetch_assoc($result)) {
Hvis det gøres konsekvent, dvs også i den SQL i #6, så det bliver en vane så undgår du helt at spekulere på hvornår det skal gøres og hvornår det ikke skal.
Synes godt om
Slettet bruger
29. januar 2011 - 14:19#14
Okay, jeg får ændret det hele hvor jeg connecter til min databasen, så er jeg sikker! :-)
Er dog ikke helt 100% på hvordan det er jeg skal gøre det, kan du evt. lave et eksempel på en af dem jeg har smidt ovenfor? Har læst lidt, men synes det virker forvirrende...
keysersoze har ret i at en af tingene du kan gøre er prepared statements.
Men en løsning der er nemmere at implementere er at alle steder hvor du henter informationer via GET, POST, etc. så skal du kalde en function der fjerner muligheden for angreb, ved at replace strings i den... hvilket er det jeg har linket til..
Synes godt om
Slettet bruger
30. januar 2011 - 21:05#17
Hackeren sidder og provokerer på min side, det er virkelig belastende at jeg ikke kan få lukket det hul, så håber der er nok flinke gutter herinde som kan hjælpe til.
Prøv at læs med her, så håber jeg i kan forstå hvorfor jeg er lidt desperat for at få lidt hjælp. Han sidder og griner af os og kan intet gøre. (Se alle sider)...
omkring prepared statements så kan jeg ikke se hvor jeg skulle sætte det ind, PHPMYADMIN hos One.com kan så vidt jeg kan se ikke gøre det, så det kommer vel også lidt an på hvilken host man har.
Men imens du arbejder på Prepared statements kan du jo ændre alle de steder hvor du bruger $_GET, $_POST, på den måde kan han i hvertfald ikke gøre det store mere.
Synes godt om
Slettet bruger
30. januar 2011 - 21:36#19
Har prøvet med mysql_real_escape_string, men synes ikke lige det ville fungerer. Ved ikke om det er fordi jeg har fået det sat forkert ind, men den blev ved med at give fejl..
Synes godt om
Slettet bruger
30. januar 2011 - 21:38#20
Jeg har min egen server, så har frie tøjler.. :-)
Men hvad med du med at ændre de steder med $_GET?? Altså til det mysql real escape?
Jeg tager lige et eksempel du tidligere har skrevet:
$newid= mysql_real_escape_string($_GET[id]);
$query = mysql_query("UPDATE listen SET klik = klik + 1 WHERE id = $newid"); $query="SELECT * FROM listen where ID=$newid"; $result=mysql_query($query) or die(mysql_error()); echo "<tablel>\n"; while($row=mysql_fetch_assoc($result)) {
Dvs. der hvor du henter din variable vha GET, POST osv, der kalder du den her metode så den fjerner farlige strenge. Men husk du må kun kalde mysql_real... metoden 1 gang. Ellers vil din side fejle.
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.