Tegen wat moet ik mijn site allemaal beveiligen? En hoe moet ik dit doen?
Beveiligen
-
-
-
Vooral op XSS en SQL injections.
Beveiligen met: [func]strip_tags[/func], [func]mysql_real_escape_string[/func], [func]htmlspecialchars[/func] of [func]htmlentities[/func].Neem aan dat het met deze PHP pagina's duidelijk is.
-
Hoe kan je een $_GET het best beveiligen? via mysql_real_escape_string?
-
-
Met [func]strip_tags[/func] en [func]mysql_real_escape_string[/func].
[func]htmlspecialchars[/func] en [func]htmlentities[/func] gebruik je als je bijvoorbeeld een textveld heb om bijvoorbeeld nieuws te posten. Dan typt iemand bijvoorbeeld een é en die word dan niet vervangen (dan zie je zo'n vaag tekentje). Die é word dan automatisch in een é vervangen waardoor het goed word weergegeven.
Als je dan bijvoorbeeld nieuws wil bewerken moet je uiteraard niet die [func]htmlspecialchars[/func] en [func]htmlentities[/func] toepassen omdat je dan in een textveld ook al é krijgt te zien. Daarom moet je [func]htmlspecialchars[/func] en [func]htmlentities[/func] alleen gebruiken bij een output.
In de MySQL database zet je dus gewoon de é en niet de é.Hieronder vind je een compeet nieuws systeem.
Dit mag je gratis van me hebben.
Maak in je database aan:PHPCREATE TABLE IF NOT EXISTS `nieuws` ( `id` int(100) NOT NULL default '0', `titel` varchar(100) NOT NULL, `omschrijving` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;En de hele PHP pagina, opslaan als nieuws.php:
PHP
Toon Meer<?php echo '<h1>Nieuws</h1><br />'; if($_GET['a'] == "nieuw"){ // Nieuws plaatsen if(isset($_POST['submit'])){ // Formulier is gepost $titel = strip_tags(mysql_real_escape_string($_POST['titel'])); $omschrijving = strip_tags(mysql_real_escape_string($_POST['titel']); if(strlen($titel) >= 3 && strlen($titel)) <= 100){ // Controleer of de titel groter dan 2 is en kleiner dan 100 tekens if(strlen($omschrijving) >= 5 && strlen($omschrijving) <= 1250){ // Controleer of de omschrijving groter dan 2 tekens en kleiner dan 1251 tekens is mysql_query("INSERT INTO nieuws (titel, omschrijving) VALUES('".$titel."', '".$omschrijving."')"); echo '<span style="color: green;"><b>Nieuws is met succes geplaatst</b>.</span><br /> <a href="nieuws.php?a=nieuw">Keer terug</a> naar de nieuws overzicht pagina'; } else{ echo '<span style="color: red;"><b>De omschrijving is kleiner dan 5 of groter dan 1250 tekens</b>.</span><br /> <a href="nieuws.php?a=nieuw">Keer terug</a> naar de nieuws toevoeg pagina'; } } else{ echo '<span style="color: red;"><b>De titel is kleiner dan 3 of groter dan 100 tekens</b>.</span><br /> <a href="nieuws.php?a=nieuw">Keer terug</a> naar de nieuws toevoeg pagina'; } } else{ echo ' <h2>Nieuws toevoegen</h2> <form method="post" action=""> <b>Titel:</b><br /> <input type="text" name="titel" size="40" maxlength="100" /><br /> <b>Omschrijving:</b><br /> <textarea name="omschrijving" cols="15" rows="8" maxlength="1250"></textarea><br /> <br /> <input type="submit" name="submit" value="Maak nieuws aan" /> </form> '; } } else if($_GET['a'] == "edit"){ // Nieuws wijzigen if(is_numeric($_GET['id'])){ // Controleer of id een nummer is $res = mysql_query("SELECT id, titel, omschrijving FROM nieuws WHERE id=".$_GET['id'].""); if(mysql_num_rows($res) > 0){ // Controleer of nieuws bestaat if(isset($_POST['submit'])){ // Formulier is gepost $titel = strip_tags(mysql_real_escape_string($_POST['titel'])); $omschrijving = strip_tags(mysql_real_escape_string($_POST['titel']); if(strlen($titel) >= 3 && strlen($titel)) <= 100){ // Controleer of de titel groter dan 2 is en kleiner dan 100 tekens if(strlen($omschrijving) >= 5 && strlen($omschrijving) <= 1250){ // Controleer of de omschrijving groter dan 2 tekens en kleiner dan 1251 tekens is mysql_query("UPDATE nieuws SET titel='".$titel."', omschrijving='".$omschrijving."' WHERE id=".$sel['id'].""); echo '<span style="color: green;"><b>Nieuws is met succes bewerkt</b>.</span><br /> <a href="nieuws.php?a=nieuw">Keer terug</a> naar de nieuws overzicht pagina'; } else{ echo '<span style="color: red;"><b>De omschrijving is kleiner dan 5 of groter dan 1250 tekens</b>.</span><br /> <a href="nieuws.php?a=nieuw&id='.$sel['id'].'">Keer terug</a> naar de nieuws bewerk pagina'; } } else{ echo '<span style="color: red;"><b>De titel is kleiner dan 3 of groter dan 100 tekens</b>.</span><br /> <a href="nieuws.php?a=nieuw&id='.$sel['id'].'">Keer terug</a> naar de nieuws bewerk pagina'; } } else{ echo ' <h2>Nieuws bewerken</h2> <form method="post" action=""> <b>Titel:</b><br /> <input type="text" name="titel" size="40" maxlength="100" value="'.$sel['titel'].'" /><br /> <b>Omschrijving:</b><br /> <textarea name="omschrijving" cols="15" rows="8" maxlength="1250">'.$sel['omschrijving'].'</textarea><br /> <br /> <input type="submit" name="submit" value="Bewerk nieuws" /> </form> '; } } else{ echo '<span style="color: red;"><b>Dit nieuws bestaat niet (meer)</b>.</span><br /> <a href="nieuws.php?a=edit">Keer terug</a> naar de nieuws bewerk pagina'; } } else{ // Kies nieuws om te bewerken $res = mysql_query("SELECT id, titel FROM nieuws ORDER BY id DESC LIMIT 2"); while($sel = mysql_fetch_array($res)){ // Zet speciale karakters en enters om naar HTML valid tekens echo '<a href="nieuws.php?a=edit&id='.$sel['id'].'"><b>Bewerk</b> "'.htmlspecialchars($sel['titel']).'"</a><br />'; } } } else{ // Nieuws laten zien $res = mysql_query("SELECT titel, omschrijving FROM nieuws ORDER BY id DESC LIMIT 2"); while($sel = mysql_fetch_array($res)){ // Zet speciale karakters en enters om naar HTML valid tekens echo '<h2>'.htmlspecialchars($sel['titel']).'</h2>'; echo htmlspecialchars(nl2br($sel['omschrijving'])); echo '<br />'; } } ?> -
Bedankt

en ik ben van plan alles zelf te maken dus niet nodig , maar toch bedankt
-
Je kan het iig gebruiken als handleiding en/of documentatie ;).
Dit systeempje is optimaal beveiligd ;). -
idd als handleiding is het wel handig aangezien ik toch redelijk veel moet opzoeken terwijl ik bezig ben

Nieuwe reactie samengevoegd met originele reactie op 26.03.11 17:32:10:
heeft iemand een tutorial voor dit? :
ik wil dat er maximaal 20 leden op 1 pagina staan , vanaf dan moet er een nieuwe pagina aangemaakt worden -
-
Beveilig tegen bots, greasemonkey.
-
Als je htmlspecialchars hebt gebruikt om iets in de database te zetten.
Staat het al als html tekens in de database.
En waarom zou je dan htmlspecialchars weer gebruiken tijdens het uitspugen van de gegevens uit de database?
Of zie ik het verkeerd?
-
Oja, snelheidsfoutje

Pas ik morgen wel even aan.
Participate now!
Heb je nog geen account? Registreer je nu en word deel van onze community!