[PHP] Beveiligen van je site.

Gestart doorRik41 reacties536 weergaven

42 berichten · pagina 1 van 3

Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Hey one2xs,

Ik zie weer steeds vaker mensen die hun sites niet geod beveiligen, en daardoor onnodig in de problemen komen bij een verkoop. Ik wil jullie hierbij een beetje verder helpen, en zal de meest voorkomende problemen uitleggen, en er een oplossing voor geven.

Plaintext, Noscript, Redirects en andere html-troep
Doordat je een gebruiker bij 9/10 sites iets wilt kunnen laten invoeren (gebruikersnaam, reacties enzovoorts), en niet elke gebruiker het beste met je site voor heeft krijg je problemen dat je site door een beveiligingslek wordt ge-noscript, of mensen plaatsen een redirect op je pagina. Dit is natuurlijk niet de bedoeling, en daarvoor is eigenlijk een simpele oplossing, htmlentities.
Htmlentities zet de string om in html entities. Zo zet hij bijvoorbeeld © om in ©. Zo wordt alles wat is ingevoerd letterlijk weergegeven, maar niet uitgevoerd. Je krijgt dus nu te zien, in plaats van dat het uitgevoerd word.

SLECHT:

[COLOR= #0000BB]<?php
$string[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]"Mijn site is <noscript> gevoelig"[/COLOR][COLOR= #007700];[/COLOR]
[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #0000BB]$string[/COLOR][COLOR= #007700];[/COLOR] [COLOR= #FF8000]// Dit zal enkel "mijn site is" laten zien, de rest word door noscript niet meer uitgevoerd[/COLOR]
?>


GOED:

[COLOR= #0000BB]<?php
$string[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]"Mijn site is <noscript> gevoelig"[/COLOR][COLOR= #007700];[/COLOR]
[URL="http://www.php.net/echo"]echo[/URL] htmlentities[COLOR= #007700]([/COLOR][COLOR= #0000BB]$string[/COLOR][COLOR= #007700],[/COLOR] ENT_QUOTES[COLOR= #007700]);[/COLOR] [COLOR= #FF8000]// Dit zal enkel "mijn site is <noscript> gevoelig" laten zien, precies wat we willen![/COLOR]
?>


ENT_QUOTES staat trouwens voor het feit dat en " ook worden omgezet, wat eigenlijk wel het beste is.

Mysql-exploits
veel sites zijn ook gevoelig voor mysql exploits. Zo zijn deze bijvoorbeeld niet beveiligd tegen namen zoals bijvoorbeeld "x; DROP TABLE users;". Waardoor, zoals je waarschijnlijk als wel snapt, de hele users tabel weg wordt gegooid. Hiervoor gebruik je het beste mysql_real_escape_string. Ik heb zelf geen ervaring met het exploiten van mysql, dus het voorbeeld kan niet helemaal kloppen, maar het geeft je een goede indruk wat er kan gebeuren.

SLECHT:

[COLOR= #0000BB]<?php
$user[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]"x; DROP TABLE users; SELECT 1 from 1 where 1 = 1"[/COLOR][COLOR= #007700];[/COLOR] 
[URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"SELECT * FROM users WHERE naam = "[/COLOR] [COLOR= #007700].[/COLOR] [COLOR= #0000BB]$naam[/COLOR] [COLOR= #007700].[/COLOR] [COLOR= #DD0000]""[/COLOR][COLOR= #007700]);[/COLOR] 
[COLOR= #FF8000]/* Wanneer je dit uitvoert voer je als het ware deze qeury uit:
SELECT * FROM users WHERE naam = x; DROP TABLE users; SELECT 1 from 1 where 1 = 1 
Hiermee selecteer je de naam x, drop je de tabel users, en selecteer je als het ware niets.*/[/COLOR]
?>


GOED:

[COLOR= #0000BB]<?php
$user[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]"x; DROP TABLE users;"[/COLOR][COLOR= #007700];[/COLOR] 
[URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"SELECT * FROM users WHERE naam = "[/COLOR] [COLOR= #007700].[/COLOR] [URL="http://www.php.net/mysql_real_escape_string"]mysql_real_escape_string[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$naam[/COLOR][COLOR= #007700]) .[/COLOR] [COLOR= #DD0000]""[/COLOR][COLOR= #007700]);[/COLOR] 
[COLOR= #FF8000]/* Wanneer je dit uitvoert voer je als het ware deze qeury uit:
SELECT * FROM users WHERE naam = x; DROP TABLE users; SELECT 1 from 1 where 1 = 1 Hiermee selecteer je de naam "x; DROP TABLE users; SELECT 1 from 1 where 1 = 1"*/[/COLOR]
?>


Input checken
Voordat je iets in de database zet moet je altijd je input checken. Ik haal even een voorbeeld van een ander forum, aangezien dat een goede uitleg is, en ik eigenlijk niet beter dan dat uit kan leggen. Dus met dank aan Daniel (Smashdown):

Quote:
Ik zal in deze tutorial gaan een beetje uitleggen hoe je clientside (dit betekend dus dat jij het alleen ziet) een exploit kan maken en zo deze serverside (zodat iedereen het dus ziet) maken. We beginnen met een formpje met een SELECT dingetje erin. Deze code ziet er als volgt uit.

<strong>Ik ben een:</strong>
<select name="geslacht">
<option value="Jongen">Jongen
<option value="Meisje">Meisje
</select>


Nu krijgen wij dus een lijstje waar wij kunnen klikken of wij een meisje of een jongen zijn. Wanneer wij meisje aanklikken zullen wij in de database komen te staan onder geslacht als meisje. Wanneer wij jongen aanklikken zullen wij in de database komen te staan onder geslacht als jongen. Nu gaan wij met Firebug deze code clientside aanpassen als volgt.

<strong>Ik ben een:</strong>
<select name="geslacht">
<option value="Jongen">Jongen
<option value="Meisje">Meisje
<option value="Exploit zoeker">Exploit zoeker
</select>


Als hierop niet beveiligt is zullen wij in de database komen te staan als Exploit zoeker et voila, we hebben onze eerste exploit te pakken.

Je moet dus altijd checken of hetegene dat verzonden word, ook daadwerkelijk mag

Het slechte voorbeeld hoef ik niet te laten zien, dat is gewoon zonder checks, dus hierbij alleen het goede voorbeeld:

[COLOR= #0000BB]<?php[/COLOR]
[URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_SERVER[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]REQUEST_METHOD[/COLOR][COLOR= #007700]] ==[/COLOR] [COLOR= #DD0000]POST[/COLOR][COLOR= #007700]){[/COLOR]
    [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]geslacht[/COLOR][COLOR= #007700]] !=[/COLOR] [COLOR= #DD0000]jongen[/COLOR] [COLOR= #007700]||[/COLOR] [COLOR= #DD0000]meisje[/COLOR][COLOR= #007700]){[/COLOR]
        [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]Foutief geslacht[/COLOR][COLOR= #007700];
    }[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
        [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]();[/COLOR] [COLOR= #FF8000]// Invoeren van geslacht, en hierbij ALSNOG mysql_real_escape_string gebruiken, just to be sure![/COLOR]
    [COLOR= #007700]}
}[/COLOR]
?>


Wachtwoorden
Wachtwoorden worden op bijna elke site wel gebruikt. Maar wat nou als onze database met wachtwoorden word gestolen? Dan zijn al onze gebruikers de sjaak. Daarvoor hebben beveiligingsspecialisten de hashalgoritme uitgevonden. Een hashalgoritme is een functie die een wachtwoord omzet in een "onleesbare" code. Er zijn in de loop van de tijd heel wat hashes gemaakt. Maar de meest gebruikte zijn "md5" en "sha".
Aangezien md5 steeds vaker word gezien als onveilig, raad ik je ook af om md5 als hashmethode te gebruiken. Daarom ga ik ook alleen in op de sha methode.

Ten eerste moet je kijken welke hashing methodes jou host ondersteund. Dit kan je doen door phpinfo te gebruiken. Zoek hierbij naar "Hashing Engines" of gewoon "Hash". Je krijgt dan een lijst met hashing methodes die worden ondersteund. In mijn geval:

Quote:
md2 md4 md5 sha1 sha224 sha256 sha384 sha512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost adler32 crc32 crc32b salsa10 salsa20 haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5

Wij gaan gebruik maken van een van de dikgedrukte methodes, indien aanwezig.
Voor sha1 gebruik je de functie sha1 voor de rest gebruiken we hash.
Indien geen van deze hashing methodes worden ondersteund op jouw host zou ik toch naar een andere host gaan zoeken.

Het toepassen van een hash is vrij simpel:

[COLOR= #0000BB]<?php[/COLOR]
[URL="http://www.php.net/sha1"]sha1[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]MijnWachtwoord112[/COLOR][COLOR= #007700]);[/COLOR]
hash[COLOR= #007700]([/COLOR][COLOR= #DD0000]sha512[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #DD0000]MijnWachtWoord112[/COLOR][COLOR= #007700]);[/COLOR]
hash[COLOR= #007700]([/COLOR][COLOR= #DD0000]sha256[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #DD0000]MijnWachtWoord112[/COLOR][COLOR= #007700]);[/COLOR]
?>


Om het nog veiliger te maken, kun je ook gebruik maken van een salt. Een salt is een code die bij jou wachtwoord word gevoegd. Zo zijn zelfs wachtwoorden als "lol1" niet meer te kraken:

[COLOR= #0000BB]<?php
$salt[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]"qwDdd872+0-4er0Sd5hž643«Gd24S2¤3Fy54Gs3dssÀõasd9137kmdjLldj/a"[/COLOR][COLOR= #007700];[/COLOR]
[URL="http://www.php.net/sha1"]sha1[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]MijnWachtwoord112[/COLOR] [COLOR= #007700].[/COLOR] [COLOR= #0000BB]$salt[/COLOR][COLOR= #007700]);[/COLOR]
hash[COLOR= #007700]([/COLOR][COLOR= #DD0000]sha512[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #DD0000]MijnWachtWoord112[/COLOR] [COLOR= #007700].[/COLOR] [COLOR= #0000BB]$salt[/COLOR][COLOR= #007700]);[/COLOR]
hash[COLOR= #007700]([/COLOR][COLOR= #DD0000]sha256[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #DD0000]MijnWachtWoord112[/COLOR] [COLOR= #007700].[/COLOR] [COLOR= #0000BB]$salt[/COLOR][COLOR= #007700]);[/COLOR]
?>


Zorg wel dat je bij zowel het ophalen va wachtwoorden, als het invoegen van wachtwoorden dezelfde hashing methode en eventuele salt gebruikt, anders zal je nooit het goede wachtwoord meer terugvinden.

Eindwoord
Dit zijn de meest voorkomende lekken die voorkomen bij sites, en hoe je ze kan oplossen. Indien men tegen andere problemen aan loopt kan je die hier altijd neerzetten, zodat ik er eventueel een oplossing voor het hele forum bij kan zetten.

Eventuele typ / script fouten voorbehouden. Deze tutorial mag niet op andere sites geplaats worden zonder toestemming.
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
handige tut
ik zal er voortaan op letten dat ik me scripts beveilig
0
Erik

Lid

Berichten
7.109
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Nice tut Rik. wink
0
Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Hashing v. wachtwoorden toegevoegd ^^
0
Berichten
20.364
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
NIICCCUH TUTbiggrin
0
Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Thanks. Ik zit momenteel een webhack boekje te lezen.. Staan wel wat leuke dingetjes in emo
0
Krm

Lid

Berichten
6.235
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
nice tutsmile
0
Berichten
20.364
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Rik schreef:
Thanks. Ik zit momenteel een webhack boekje te lezen.. Staan wel wat leuke dingetjes in emo
Zoals. Zal wel is willen wetenemobiggrin
0
Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Een Session-Steal dingetje emo
0
Bas

Lid

Berichten
1.081
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Wil je hier ook ff neerzeten hoe dat moet?
0
Berichten
13.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Baseldekker:
Wil je hier ook ff neerzeten hoe dat moet?

Ik denk niet echt dat jullie moeten weten hoe je kan session-stealen

zorg gewoon dat alle ingevulde velden die in een database staan bijvoorbeeld, als ze er uitgehaald worden door een htmlentities gaan
0
Rik

Lid · Topicstarter

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Zoals sjoerd inderdaad al zei is het niet relevant om te weten hoe je sessies moet stelen emo
0
Berichten
473
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Mooie Tut Rik winkDit zal velen helpen biggrin
0
Berichten
7.681
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
vraagje over de salt.
hoe maak je zon code?
mag je daar gewoon iets invullen ofzo?
0
Berichten
18.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Kun je zelf iets invullen. Hoe complexer hoe beter (hoofdletters, kleine letters, cijfers, leestekens)
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren