Input fields beveiligen
Hoe kan ik het beste mijn input field beveiligen tegen codes?
Om mijn MySQL te beveiligen gebruik ik;
Maar wanneer ik in de textbox bv. ' "> ' type, is er allemaal HTML code zichtbaar naast mijn textbox, is er een manier om dit tegen te gaan?
Ook wil ik dat wanneer er op de submit knop gedrukt is, hij controleert of het alleen uit letters bestaat. Normaal gesproken gebruikte ik ereg, maar met PHP 5.3 werkt dat niet meer? Ik heb nu;
Maar hij laat altijd fout zien..
Weet iemand hoe ik het beste een textbox/formulier kan beveiligen?
Gewijzigd op 25/01/2011 10:27:41 door Jay ---
Jay --- op 25/01/2011 10:18:59:
Maar wanneer ik in de textbox bv. ' "> ' type, is er allemaal HTML code zichtbaar, is er een manier om dit tegen te gaan?
htmlspecialchars($naam)
Gewijzigd op 25/01/2011 10:23:41 door Tim Fendt
(Als ik bv. " \"><span style=\"color:red;\">Haha</span> " invul in de textbox, komt er naast de textbox een rode Haha te staan.)
[Edit:]
Hoe kan ik zorgen dat wanneer er een karakter gebruikt is die niet toegestaan is er geen toegang is?
Gewijzigd op 25/01/2011 10:42:06 door Jay ---
Als ik jou was, zou ik kiezen tussen twee opties:
htmlspecialchars($string)
schrijft alle karakters die actief zijn in html als tekst uit.
strip_tags($string)
haalt alles wat html is (de tag + attributes) weg
Oh wacht hij laat de quotes wel staan?
Ik heb nu een preg_replace, die alles wat geen a-zA-Z0-9 weghaalt. Misschien niet professioneel maar werkt perfect :).
Nog een klein vraagje, hoe kan ik zorgen dat ik meerdere errors tegelijk krijg ipv omstebeurt? Dus;
Naam is niet ingevuld!
E-Mail klopt niet!
Wachtwoorden komen niet overeen!
Of moet/zal ik hiervoor nieuwe topic starten?
Gewijzigd op 25/01/2011 12:31:55 door Jay ---
Code (php)
Al je errors zitten nu in $error_log opgeslagen.
strip_tags alleen is niet voldoende. Altijd htmlspecialchars() of iets dergelijks erna doen.
HINT: <b<b>>Dit wordt vet gedrukt.</</b>>
Gewijzigd op 25/01/2011 14:02:44 door - Mark -
Jay --- op 25/01/2011 12:27:15:
Ik heb nu een preg_replace, die alles wat geen a-zA-Z0-9 weghaalt. Misschien niet professioneel
Je zegt het zelf; niet professioneel.
Zou ik echt niet doen hoor.
Ik weet niet of je enkel leden verwacht die Jan Kees heten, maar in de reële wereld is dat niet het geval. Je discrimineert iedereen die een accent of raar teken in de naam heeft.
François, Gaëlle, ... laat staan Turkse of Scandinavische namen ...
Mark Coenen op 25/01/2011 12:38:08:
strip_tags alleen is niet voldoende. Altijd htmlspecialchars() of iets dergelijks erna doen.
HINT: <b<b>>Dit wordt vet gedrukt.</</b>>
HINT: <b<b>>Dit wordt vet gedrukt.</</b>>
Probeer zelf eens
Code (php)
1
2
3
4
2
3
4
<?php
$a = '<b<b>>Wordt dit vet gedrukt?</</b>> I think not.';
echo strip_tags($a);
?>
$a = '<b<b>>Wordt dit vet gedrukt?</</b>> I think not.';
echo strip_tags($a);
?>
Gewijzigd op 25/01/2011 12:58:45 door Kris Peeters
@Kris Dat is niet altijd zo geweest of wel? Anyway zelf ook weer wat geleerd.
Goed mogelijk dat dat vroeger anders was. Als ik de documentatie op php.net lees, denk ik dat ze eerder te veel weglaten dan te weinig, indien je met tags begint te prutsen.
Mark Coenen op 25/01/2011 12:38:08:
Dat kun je met array's doen.
Ok, en hoe kan ik zorgen dat als alles wel correct is hij het script wel verder uitvoert? Als ik een else gebruik is het alleen maar voor de bijbehorende if.
En als ik htmlspecialchars gebruik en daarna strip dan is er idd geen HTML meer zichtbaar maar de tags zijn er nog wel, met die preg_replace zorgde ik ervoor dat ze werden weggehaald, is hier ook al een speciale functie voor?
[En moet ik trouwens $naam = htmlspecialchars($_REQUEST['naam']; of strip_tags($_REQUEST['naam'];)
Gewijzigd op 25/01/2011 13:30:59 door Jay ---
$naam = htmlspecialchars( strip_tags($_REQUEST['naam']) );
Jay --- op 25/01/2011 13:29:03:
Ok, en hoe kan ik zorgen dat als alles wel correct is ...
Mark Coenen op 25/01/2011 12:38:08:
Dat kun je met array's doen.
Ok, en hoe kan ik zorgen dat als alles wel correct is ...
Toon zelf eens wat je nu hebt.
We moeten je loop zien waar je je records fetcht
Gewijzigd op 25/01/2011 13:43:38 door Kris Peeters
Ik heb ook de array toegepast, maar ik snap niet echt hoe het werkt, bij komt er alleen maar "Array" te staan.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if(isset($_POST['submit'])){
$naam = htmlspecialchars( strip_tags($_REQUEST['voornaam']));
$anaam = htmlspecialchars( strip_tags($_REQUEST['achternaam']));
$errorlog[] = array();
if(empty($naam){
$errorlog[] = "De naam is niet ingevuld..";
}
if(empty($anaam){
$errorlog[] = "De achternaam is niet ingevuld..";
}
echo $errorlog;
}
echo"<input type='text' value='.$naam.' id='naam' name='naam' />";
?>
if(isset($_POST['submit'])){
$naam = htmlspecialchars( strip_tags($_REQUEST['voornaam']));
$anaam = htmlspecialchars( strip_tags($_REQUEST['achternaam']));
$errorlog[] = array();
if(empty($naam){
$errorlog[] = "De naam is niet ingevuld..";
}
if(empty($anaam){
$errorlog[] = "De achternaam is niet ingevuld..";
}
echo $errorlog;
}
echo"<input type='text' value='.$naam.' id='naam' name='naam' />";
?>
PHP: foreach loop gebruiken.
Om een array uit te lezen moet je een die [] moet achter errorlog weg. Foutje in mijn voorbeeld. De [] is om een nieuwe key aan te maken als je een error toevoegt.
Maar ik zit nu nog met het HTML probleem, hoe kan ik zorgen dat alleen juiste tekens worden uitgelezen, of dat het een foutmelding geeft wanneer je leestekens gebruikt, en accenten wel gewoon werken?
bvd
htmlentities ;-)
Gebruik overigens liever Wat ik wil is een if statement;
Daarvoor gebruiken meeste mensen ereg en preg_, maar zoals Kris P al zei; mensen met accenten worden dan gediscrimineerd..
Is er een andere methode die uitsluitend lees- en specialetekens weghaalt en niet omzet naar HTML?
Jay, htmlentities al eens uitgebropeerd? is anders dan specialchars namelijk..
Geeft exact hetzelfde als htmlspecialchars.
Hoe moet ik hem gebruiken?
[Edit: En ik wil ook dat er een waarschuwing komt wanneer je onjuiste tekens gebruikt.] Is dit mogelijk? Of is er een pattern voor accenten in preg_match?
Gewijzigd op 25/01/2011 16:16:45 door Jay ---