Avatar billede Slettet bruger
27. januar 2011 - 11:51 Der 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?
Avatar billede heinzdmx Nybegynder
27. januar 2011 - 11:54 #1
Hvilket sprog bruger du ??

PHP / ASP / ASP.NET?

Der er nogle forskellige tekniker, der formindsker risikoen:

For PHP er der her en mulighed her:
http://www.netlobo.com/preventing_mysql_injection.html
Avatar billede Slettet bruger
27. januar 2011 - 11:55 #2
Kører PHP...
Avatar billede Slettet bruger
27. januar 2011 - 11:56 #3
Har lige ændret hele min side fra ASP til PHP.. Skulle jeg vist ikke have gjort! :-)
Avatar billede heinzdmx Nybegynder
27. januar 2011 - 12:09 #4
Se det link jeg har givet dig. Så inden du kalder din database så laver du et kald til den metode med
quote_smart("valuetoescape")


Og så er det lige blevet en del sværere at lave noget i den stil mod din hjemmeside.
Avatar billede keysersoze Guru
27. januar 2011 - 12:16 #5
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.
Avatar billede 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());
Avatar billede keysersoze Guru
27. januar 2011 - 12:31 #7
det er "kun" når din SQL tager imod parametre fra fx post eller get at brugerne kan manipulere med den.
Avatar billede nissen2630 Novice
27. januar 2011 - 13:46 #8
Dette må være rekorden på Eksperten
flx666 (1.345 point. Point ude: 5.895)


Tror du ikke at det var en ide at få ryddet op i alle de gamle spørgsmål.
Avatar billede heinzdmx Nybegynder
27. januar 2011 - 13:53 #9
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.
Avatar billede 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.
Avatar billede 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))
{
Avatar billede keysersoze Guru
27. januar 2011 - 18:23 #12
alle steder hvor SQL'en dannes ud fra brugerafhængige variabler - post, get, session etc etc.

http://www.web-dev.dk/post/SQL-injections-mere-end-bare-et-pling.aspx
Avatar billede keysersoze Guru
27. januar 2011 - 18:27 #13
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.
Avatar billede 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...
Avatar billede keysersoze Guru
29. januar 2011 - 16:36 #15
det er ikke din connection der er noget galt med - det er dine sql statements. Jeg kan ikke PHP så kan desværre ikke give andre eksempler end Google.
Avatar billede heinzdmx Nybegynder
29. januar 2011 - 17:04 #16
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..
Avatar billede 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)...

http://www.hyggeserver.dk/phpBB3/viewtopic.php?f=2&t=14454

Har kigget på det prepared statements, men er ikke helt med på det. Så meget har jeg desværre ikke arbejdet med SQL.
Avatar billede heinzdmx Nybegynder
30. januar 2011 - 21:27 #18
Jeg har givet min løsning se #1 sammen med #4..

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.
Avatar billede 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..
Avatar billede 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?
Avatar billede heinzdmx Nybegynder
30. januar 2011 - 21:44 #21
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.
Avatar billede keysersoze Guru
30. januar 2011 - 22:27 #22
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
Computerworld tilbyder specialiserede kurser i database-management

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