Avatar billede artico Novice
20. november 2006 - 17:52 Der er 12 kommentarer og
1 løsning

Spam / Hacker på min side

Hej, jeg har min website bygget op så siderne ligger i biblioteker og blir så hentet ind som f.eks: index.php?nx=biblio/vare

Nu er der en hacker der drøner gennem mine sider med en mailformular og jeg kan se via min statistik at han tilføjer dette:

index.php?nx=http://www.geocities.com/bluekey_nig/umubiafra-fobocrew_10.txt?

Når jeg følger "idiotens" link (måske er det mig der er den største idiot) så viser de min side med hans mailformular :-(

Hvad kan jeg gøre så jeg undgår at nogen kan gøre sådan på min side ?
Avatar billede apo Praktikant
20. november 2006 - 18:06 #1
1. Kontakt din host. De bør underrettes om sikkerhedsbrister, så de kan blive opmærksomme på dem, og derved kan indføre de nødvendige foranstaltninger.

2. Kontakt www.geocities.com og fortæl dem om situationen. Fortæl dem, at nogen misbruger både dit website og deres tjeneste i forbindelse med ulovligheder.

(3. Hvis din host ikke kan/vil gøre noget ved sikkerheden på serveren/serverne, skift til en anden host).
Avatar billede apo Praktikant
20. november 2006 - 18:08 #2
... jeg kan se at geocities.com er ejet af Yahoo nu. Yahoo burde tage den slags situationer alvorligt.
Avatar billede artico Novice
20. november 2006 - 18:23 #3
OK, har næstet prøvet alt (undtaget af skrive en julesang om det) Meeeeeen er der ikke noget med at jeg selv kan validere det der kommer gennem nx= ??
Avatar billede leif Seniormester
20. november 2006 - 18:28 #4
apo -> Hvordan kan det være hosten's skyld at siden ikke er kodet ordentligt ?
Avatar billede apo Praktikant
20. november 2006 - 18:35 #5
Jo, det skal man selvfølgelig _altid_ gøre (det troede jeg sådan set, var en selvfølge).

Men er du sikker på, at han kun har omskrevet din querystring? Hvis han er gået gennem din FTP eller på anden måde har brugt brute force (ulovligheder), bør du kontakte din host og geocities/Yahoo om situationen.

Hvis dit næste spørgsmål bliver hvordan man validerer input fra en querystring via PHP, så kan jeg ikke hjælpe dig - jeg er ASP-mand :o)
Avatar billede apo Praktikant
20. november 2006 - 18:38 #6
leif > Det kan det selvfølgelig aldrig blive :o)

Men min første antagelse var, at hackeren/crackeren havde benyttet sig af en sikkerhedsbrist på serveren - jeg havde ikke regnet med, at inputtet fra querystringen ikke blev valideret.
Avatar billede intenz Novice
20. november 2006 - 19:39 #7
Ellers kan du indsætte sådan en her, den ser om der er http:// i din nx= streng, hvis der er smider den brugeren over til en anden side.

if (strpos($_SERVER["REQUEST_URI"], "nx=http://") !== false) {
header("Location: skrid.php");
}
Avatar billede dennismp Nybegynder
21. november 2006 - 06:15 #8
intenz: Så må man jo bare håbe på at de ikke encoder noget en del af "nx=http://". Eller at register-globals er slået til (kommer lidt an på hvordan koden er) ..

En god og nem løsning er at lave en liste over lovlige "nx" værdier og så tjekke op imod den. Noget i stil med:

$valid_pages = array('biblio/vare', 'page2', '');
if(! in_array($_GET['nx'], $valid_pages) ) {
  header("Location: /"); 
  exit;
}

Hvis du syntes det er besværligt at rette i array'et når du tilføjer sider, så kan du evt oprette en tekstfil med alle de links der er lovlige.. Fx
--- valid_pages.txt --
biblio/vare
page2/

--- slut ---

og så bruge følgende kode:
if(! in_array($_GET['nx'], file('valid_pages.txt')) ) {
  header("Location: /"); 
  exit;
}

Det var et par forslag ihvertfald :)
Avatar billede webmus Nybegynder
21. november 2006 - 09:05 #9
Du kan også bare tjekke om der er "http://" i $_GET[nx] sådan her:

<?php
if(isset($_GET[nx]) && ereg("http://", $_GET[nx])) {
echo "LAD SÅ VÆR DIN BANDIT";
exit;
}
?> ;D
Avatar billede artico Novice
21. november 2006 - 09:46 #10
dennismp » Jeg har i min admin, en side hvor jeg opretter menuerne og gemmer side linket i en DB, måske var det en ide at sammeligne disse med hvad der sker i nxén ?

Har du en ide til det, hvis de lovlige sidelink ligger i DBén adminmenu og hedder url ?
Avatar billede dennismp Nybegynder
21. november 2006 - 10:00 #11
webmus: Hvad med https ? ftp? gopher? file  ? ..

Blacklists bliver ikke ligeså godt som whitelisting.

artico:

mysql_connect(...) osv

if(!valid_page($_GET['nx'])) {
  header("Location: /");
  exit;
}

function valid_page($nx) {
  $res = mysql_query(sprintf("SELECT 1 FROM dintabel WHERE url = '%s'", mysql_real_escape_string($nx)));
  return($res && mysql_fetch_row)
}

noget i den dur
Avatar billede webmus Nybegynder
21. november 2006 - 10:02 #12
så skulle koden være noget i stil med:

<?php
include_once("connect.php");

$resultat = mysql_query("SELECT COUNT(id) as antal FROM tabel_navn WHERE **** ='$_GET[nx]'");
$post = mysql_fetch_array($resultat);
$antal = $post[antal];

if($antal == 0) {
echo "Denne side er ikke tilladt at vise.";
exit;
}
?>
Avatar billede dennismp Nybegynder
27. juli 2007 - 20:50 #13
Bare som en afsluttede kommentar. Webmus løsning introducere SQL injection. Det er bedre end PHP-kode injection, meeeen..
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