Veilig opzetten online website
Ik ben nieuw hier en in de wereld van php/mysql & ajax.
Vandaag wou ik beginnen met het bouwen van een website, php en mysql spreken wel enigsinds voor zich als je programmeer kennis hebt. Maar ik kwam al snel sql injectie tegen op google. En zag ik een filmpje van iemand die de sourcecode kopieerde, bestand aanpaste en zo inlogde op een server (ik neem aan dat het wachtwoord dan gecheckt wordt in de html).
Nou snap ik php/mysql wel aardig maar waar moet ik nou rekening mee houden met het bouwen van een veilige website, SQL injectie ken ik inmiddels maar wat zijn andere gevaren voor hackers enzo.
Alvast bedankt
- Session Hijacking (cookies)
- XSS
- SQL Injection
- Brute Force
Verder moet je zorgen dat je bv geen user credentials in cookies opslaat.
Ook moet je zorgen dat je user data nooit geloofd/vertrouwd. Deze zal je altijd (!) moeten controleren!
Gewijzigd op 09/09/2010 20:22:13 door niek s
Let op dat je nooit direct een input ($_POST, $_GET, enz.) echoëd!! Je website is dan binnen een paar minuten gehackt.
Nu is dat niet zo gevaarlijk met een echo, maar wel met een MySQL_Query.
Dit omdat je database met een sub-query verwijderd kan worden.
Gebruik om je inputs ALTIJD:
strip_tags();
Deze raad ik aan boven mysql_real_escape_string(); die alleen voor MySQL(i) is.
Veel succes!
Lars
Lars Groot op 09/09/2010 21:08:58:
@dalando,
Nu is dat niet zo gevaarlijk met een echo, maar wel met een MySQL_Query.
Dit omdat je database met een sub-query verwijderd kan worden.
Gebruik om je inputs ALTIJD:
strip_tags();
Deze raad ik aan boven mysql_real_escape_string(); die alleen voor MySQL(i) is.
Veel succes!
Lars
Nu is dat niet zo gevaarlijk met een echo, maar wel met een MySQL_Query.
Dit omdat je database met een sub-query verwijderd kan worden.
Gebruik om je inputs ALTIJD:
strip_tags();
Deze raad ik aan boven mysql_real_escape_string(); die alleen voor MySQL(i) is.
Veel succes!
Lars
Dude...
Gebruik geen strip tags.
Voor je iets in een db gooit, doe je er een mysql real escape string overheen, en op het moment dat je het op het scherm doet htmlentities()
Ohja, strip tags werkt ook niet tegen sql injection.....
Gewijzigd op 09/09/2010 21:43:58 door niek s
Ook moet je zorgen dat je user data nooit geloofd/vertrouwd. Deze zal je altijd (!) moeten controleren!
Wat bedoel je daar precies mee? Zou je wat duidelijker kunnen zijn hierover?
SQL injection had ik opgezocht, mysql real escape string werkt daar tegen toch?
Die XSS had ik ook opgezocht die begrijp ik wat minder. Die andere ff opzoeken.
Misschien kan iemand mij vertellen waar de bovenstaande bedreigingen over gaan?
Deze had ik gevonden...http://www.scriptorama.nl/security/tips-voor-een-veiligere-site
Gewijzigd op 09/09/2010 22:02:10 door mart mol
Bijvoorbeeld het kopiëren van de cookies van een persoon. Wat er voor zorgt dat je kan authenticeren als die persoon.
Daartegen is gewoon htmlentities() te gebruiken op het moment dat je de data op het scherm toont.
Stel je hebt een formulier, met een select box waar een aantal getallen uit gekozen kunnen worden.
Daar lijkt niks mis mee, zolang je een normale gebruiker hebt is hier geen risico want getallen kunnen weinig kwaad.
Maar een hacker zal zich daar vrij weinig van aantrekken, en omdat je user data niet vertrouwd ga je bij het afhandelen controleren of de waarde die uit de select box moet komen ook echt een getal is.
Als je weet wat voor data je ongeveer verwacht (getallen, datums, text, multiple choise), dan moet je daarop controleren of het ook echt wel zo'n soort waarde is.
strip_tags werkt erg handig op zich, alleen kan je beter eerst controleren of $input gelijk is aan strip_tags($input)
Je wilt het toch weten als iemand XSS probeerd?
mysql_real_escape_string is in dat op zich wat anders, die escaped alleen maar, voorkomt daarmee wel mysql injection maar die zal ook de tekst veranderen bij onschuldige tekst (omdat er bv een ' in zit)
Daar dus niet controleren of de originele tekst gelijk is aan de mysql_real_escape_string versie.
Verder onthouden dat geen website waterdicht is. Maak het hackers zo moeilijk mogelijk en log zoveel mogelijk, zodat Als je toch gehacked word dat je tenminste kan controleren hoe dat gebeurd is.