Beveiliging
Pagina: « vorige 1 2 3 4 volgende »
Hoewel het overigens beter is om wachtwoorden te encrypteren met een pepper/salt ;)
Nee de database zit in een MySQL Server, je moet eerst verbinding met de server maken wil je databases kunnen benaderen. Dus de inlog gegevens uit je config.php zijn niet voor je database, maar voor je server.
mysql_connect() maakt verbinding met je MySQL Server niet met een database, dat doe je met mysql_select_db().
ALs je achter de gegevens in een config file wilt komen zul je toch eerst FTP access moeten hebben. Je FTP account in nooit en ten nimmer (bij hostingbedrijven) gelijk aan je MySQL account.
Goede mensen beveiligen hun config.php account extra door deze buiten de root (www/httpdocs) te plaatsen.
Toevoeging op 16/05/2012 17:55:24:
@Chris,
Ik heb je Bruteforce protectie tut gelezen, beste is dus de combo DB en IP checken.
Ik heb wel 2 vraagjes.
1) Hoe pak je dit slim aan als je inlog systeem op file basis is en er geen MySQL beschikbaar is?
2) Heb je een 'voorbeeld' script hoe een DB/IP checker eruit kan zien?
Gewijzigd op 16/05/2012 16:32:09 door Chris PHP
Het invullen van zo'n script is echt afhankelijk van de rest van het systeem. OOP, MVC, Framework of procedureel..
Erg moeilijk is het niet. Voer een nieuwe entry in met daarin de datum, ip-adres en account op het moment dat iemand probeerd in te loggen. Bij iedere inlog-request controleer je in een tabel hoe vaak er is geprobeerd in te loggen vanaf dat IP-adres en op dat account. Als er meer dan x-aantal pogingen zijn vanaf dat ip-adres en op dat account, verwerk je de login niet.
Extra tip:
Controleer IP-adressen enkel en alleen door middel van $_SERVER['REMOTE_ADDR']. Dat is de enige die klopt en niet kan worden aangepast door de bezoeker. (Tenzij, hypothetisch, je server dusdanig is gehackt dat er voor wordt gezorgd dat een specifiek IP-adres altijd een ander IP-adres krijgt.. Maar op het moment dat dat gebeurd, heb je wel grotere zorgen dan een brute-force aanval...)
Edit:
Klopt, moest inderdaad REMOTE_ADDR zijn. Excuses voor de verwarring!
Gewijzigd op 21/05/2012 10:25:26 door Chris -
Gewijzigd op 17/05/2012 08:42:59 door Eddy E
Omdat sommige mensen een hostingpakket hebben zonder database, dus kan ik nooit een site maken rondom een database. Wat ik dan doe is een login systeem maken waar de inlog gegevens in een config staan (ww is wel encrypted uiteraard).
Dank je voor de tips, dus in principe maak je gewoon een 'log' tabel waar je het ipadres opslaat, aantal pogingen en eventuele ingevulde gebruikersnaam?
en dan vervolgens in het inlogscherm met zoiets als dit controleren?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$select = "SELECT IP, loginpoging FROM log WHERE IP = '".$_SERVER['REMOTE_ADDR']."'"
$query = mysql_query ($query);
$result = mysql_fetch_assoc ($query);
if ($result['IP'] === $_SERVER['REMOTE_ADDR'] && $result['loginpoging'] >= 5) {
echo "Er zijn teveel pogingen gedaan tijdens het inloggen, probeer het na 10 minuten nog eens";
} else {
//rest van het script
}
?>
$select = "SELECT IP, loginpoging FROM log WHERE IP = '".$_SERVER['REMOTE_ADDR']."'"
$query = mysql_query ($query);
$result = mysql_fetch_assoc ($query);
if ($result['IP'] === $_SERVER['REMOTE_ADDR'] && $result['loginpoging'] >= 5) {
echo "Er zijn teveel pogingen gedaan tijdens het inloggen, probeer het na 10 minuten nog eens";
} else {
//rest van het script
}
?>
Maar hoe reset je dit na 10 minuten?
En hoe stel ik een tijdslimiet in bij het inloggen?
P.S. Ik heb hier $_SERVER['REMOTE_ADDR'] vanwege wat idd wat Eddy zegt.
Gewijzigd op 18/05/2012 07:38:25 door Chris PHP
Je moet tellen hoeveel pogingen er waren tussen nu en 10 minuten geleden.
Dus alle rijen even aflopen en kijken of de tijd > nu+10min
Dus iets als:
Code (php)
1
$select = "SELECT IP, loginpoging FROM log WHERE IP = '".$_SERVER['REMOTE_ADDR']."' AND tijdstip > DATE_SUB(NOW(),INTERVAL 10 MIN)";
Dan selecteer je alleen de pogingen van de laatste 10 minuten.
Maar... dan moet je elke inlogpoging wel als een aparte rij opslaan. Dat doe je toch wel? Of staat er een 8 (voor 8 inlogpogingen) in je database?
Dank je voor je uitleg, klinkt logisch hoe je het zegt.
Ik zat te twijfelen of ik nu idd een update of een insert wilde gebruiken.
Echter was i persoonlijk ook al voor de insert gegaan zodat elke poging een eigen entry krijgt in de database. Het is ook overzichtelijker om het zo te doen.
Ik zal mijn loginscript vanavond eens uitbreiden met deze functie en kijken of het na behoren werkt.
nu we het over beveiliging hebben.. vandaag erachter gekomen dat een website van iemand die ik ken via ftp gehackt is en er is op elke index pagina ( admin gedeelte test omgeving en normale index.php ) een scriptje op de eerste regel voor de doctype gezet deze heb ik overal weggehaald en de wachtwoorden en alles veranderd en de tips opgevolgd van google's advies site vervolgens heb ik een verzoek ingediend bij google om deze opnieuw te inspecteren ( de website ) zodat je geen gevaren page te zien krijgt. weet iemand hoelang het duurt voor dat ze zo een verzoek in behandeling nemen?
48 uur ongeveer? Heb het 1 gehad bij een bedrijf, nadat ik aanvraag had gedaan om hem opnieuw te laten indexeren was het binnen 24 uur klaar.
En zorg er ook voor dat het config file niet te veel rechten heeft.
@gerhard hmm dat is nog alsnog best lang.. maarja niets aan te doen :)
Chris NVT op 18/05/2012 08:53:19:
@Eddy,
Dank je voor je uitleg, klinkt logisch hoe je het zegt.
Ik zat te twijfelen of ik nu idd een update of een insert wilde gebruiken.
Echter was i persoonlijk ook al voor de insert gegaan zodat elke poging een eigen entry krijgt in de database. Het is ook overzichtelijker om het zo te doen.
Ik zal mijn loginscript vanavond eens uitbreiden met deze functie en kijken of het na behoren werkt.
Dank je voor je uitleg, klinkt logisch hoe je het zegt.
Ik zat te twijfelen of ik nu idd een update of een insert wilde gebruiken.
Echter was i persoonlijk ook al voor de insert gegaan zodat elke poging een eigen entry krijgt in de database. Het is ook overzichtelijker om het zo te doen.
Ik zal mijn loginscript vanavond eens uitbreiden met deze functie en kijken of het na behoren werkt.
Eventueel kan het met 1 functie: http://www.phphulp.nl/php/tutorial/beveiliging/anti-bruteforce-script/783/
Ik ga hem erbij pakken en kijken hoe ik het kan implementeren in mijn eigen login script. Dit is voor het eerst dat ik een bestaand script ga gebruiken.
Thanks for sharing.
Er zijn overigens volledige classes hiervoor te vinden, maar het princiepe blijft altijd hetzelfde. Als je een inlogsysteem maakt zonder mysql omdat je klant een hosting heeft zonder hosting, wordt het eerder tijd om een overstap te maken naar een fatsoenlijke hosting dan je systeem op een dusdanige manier te bouwen dat je bent gelimiteerd aan textbestanden. Overigens kun je dan nog steeds een antibruteforce maken, maar kost meer tijd om dat in te laden. Plus buiten dat, al je bestanden moet je dan buiten je webroot houden wat ook weer tot problemen kan leiden bij sommige hosters. Overweging om dus over te stappen naar een degelijke hosting is dus groot...
Dank je voor de info, ik heb idd aangeraden om over te stappen (naar mij uiteraard ;)) en dat was hij ook van plan. Echter zit deze klant wat op de centen en wil niet 2x voor hosting betalen, dus hij gaat volgend jaar over.
Lekkere schop omhoog, iemand nog vragen of nuttige links?
is een mysql database veiliger dan een access of een andere database type?
Welke zijn het veiligst in gebruik.
Tuurlijk moet je ook op sql-Injection letten.
Btw, lees straks even je pm.
Gewijzigd op 30/05/2012 18:28:03 door - Diov -
Hoe vaak wordt een Access database gebruikt voor een website? ;) Vrij weinig. Je kan eerder kijken naar pgSQL bijvoorbeeld, een beter database dan MySQL volgens velen!
wachtwoorden encrypteren. Hoewel het een niet technische uitleg is, staat er volgens mij genoeg informatie in om het zowel als leek, als niet-leek te begrijpen!
Zo, een schop om dit topic ook weer eens in de spotlight te krijgen. Der was een tijdje geleden de vraag of ik nog tips & trucs had. Ik heb een vrij simpel te volgen artikel geschreven over Leuk dat je het topic bumped. Heb het even doorgenomen, interessant.