Input checken

Door Mark L, 16 jaar geleden, 3.964x bekeken

Dit is een functie die je het best kan gebruiken voordat er iets met input van een gebruiker gedaan word. Ook is dit script gemaakt om voor enige output gebruikt te worden, zodat je geen errors krijgt als je zou gaan redirecten als er iets fout is.

De functie veranderd superglobals net iets, dat ze automatisch gecontroleerd worden en veiliger zijn. (d.m.v. htmlentities [htmlentities nu alleen nog maar met de check: html] en addslashes)

De checks, die ik erop heb gemaakt zijn:
num: controleert of de waarde een getal is.
mysql: zet mysql_real_escape_string over de waarde heen (dit is niet echt een controle)
length: controleert de lengte van de waarde (aantal tekens), maar je kan deze ook zo instellen dat hij, bij een getal controleert of dit getal tussen 2 waardes inzit.
aantal mogelijkheden: Als er maar een aantal mogelijkheden zijn (bijvoorbeeld selectboxen, checkboxen of radiobuttons), kan hier ook op gecontroleerd worden.
html: haalt een htmlentities over de waarde

De checks moet je op deze manier in een array zetten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$var
= array();

// Eerst zet je de superglobal waarin gezocht moet worden, bijvoorbeeld GET:
$var = array('GET' => '');

// Dan ga zet je de waarde die bij de superglobal hoort als een array:
$var = array('GET' => array());

// Nu kijken we welke keys van de superglobal we willen controleren, voorbeeld: De id (GET variabele)
$var = array('GET' => array('id' => ''));

/* Alles hiervoor was de opzet, nu het werkende spul: */

// Waarom wil je deze waarde controleren? In dit voorbeeld natuurlijk wil je zien of het een getal is:

$var = array('GET' => array('id' => 'NUM'));

// Misschien mag het getal alleen tussen de 1 en de 100 zitten:
$var = array('GET' => array('id' => 'NUM Length(1, 100, INT)'))

// Zoals je ziet, kan je zoveel controles erin zetten als je wilt. Dit kan gewoon achter elkaar.
// Behalve bij de check de aantal mogelijkheden check, want die werkt zo:

$var = array('GET' => array('select' => array('test', 'test1', 'test2')))
?>


Je kunt natuurlijk zelf nog allerlei controles verzinnen. Zet die dan wel op de goede plek in de functie ;-)

ik hoop dat dit een nuttige functie is.

Edit:

Ik heb het zo gemaakt dat die functie helemaal niet nodig is. Ik bedoel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
function check_input($userinput, $checks)
{

// code die natuurlijk wel moet
}
?>


Dit is een functie die kan helpen bij de beveiliging van een script (voornamelijk tegen SQL injection, maar het kan voor meer dienen). Met deze functie is je script niet per definitie veilig!

Voorbeeld: http://futronic.awardspace.com/check_input.php

Gesponsorde koppelingen

PHP script bestanden

  1. input-checken

 

Er zijn 9 reacties op 'Input checken'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Iltar van der berg
iltar van der berg
16 jaar geleden
 
0 +1 -0 -1
Quote:
De functie veranderd superglobals net iets, dat ze automatisch gecontroleerd worden en veiliger zijn. (d.m.v. htmlentities en addslashes)


En waarom zou dat veiliger zijn?? het enige wat je nodig hebt is mysql(i)_real_escape_string().
Wil je daarna de waardes meteen printen, gebruik je stripslashes...
Mark L
Mark L
16 jaar geleden
 
0 +1 -0 -1
Ja, maar hiermee kan je ze automatisch laten controleren voordat je ook maar een SQL hebt uitgevoerd.

Misschien kom je er anders te laat achter. En dan zit een gedeelte in de database.

Oké, daar heb je transacties voor, maar nu hoef je nog helemaal niks gedaan te hebben om erachter te zijn gekomen.

Ook word htmlentities automatisch gedaan, maar dit is niet zo heel erg.

Ook handig is dat je altijd nog iets er heel makkelijk kan invoegen, zoals een andere controle of een andere vorm van weet ik veel wat.. (als je dit bestand gewoon include)
Frank -
Frank -
16 jaar geleden
 
0 +1 -0 -1
Gaan we weer: htmlentities() gebruik je om html-entities op het scherm te zetten. Die zooi wil je dus niet in bv. de database, een email, RSS-feed of ik weet niet wat hebben. Gebruik dit dus uitsluitend bij html-output en nooit en te nimmer op input.

Verder kun je add_slashes beter vergeten en de benodigde database-functie pakken die op de juiste manier slashes toevoegd. Dat is veel handiger.
Mark L
Mark L
16 jaar geleden
 
0 +1 -0 -1
O, ik dacht dat ik juist had gehoord wel html-output in de DB, ik dacht al: Dat kost alleen maar tekens...

Haal ik eruit..

En er zit ook al de benodigde database-functie in: (ik heb een MySQL db genomen hier) namelijk mysql_real_escape_string(); en dan word addslashes niet gebruikt.
Frank -
Frank -
16 jaar geleden
 
0 +1 -0 -1
@Mark: addslashes wil je niet gebruiken, er zijn vrijwel altijd betere oplossingen. Komt nog eens bij dat je dan bij het ophalen van de data, de boel weer moet strippen. Dat is zwaar klote, dat ga je een keer vergeten. Vervolgens wordt data geupdate en staan er nog meer slashes in de data... Kortom, jouw data is corrupt geraakt.

Zie bv. de tutorial van Blanche over PDO en zie de handleiding op php.net van de database die jij wilt gebruiken.

Quotes en slashes moet je zeer zorgvuldig mee omgaan. En vergeet daarbij niet, dat de data niet alleen voor html kan worden gebruikt, maar ook voor een pdf-je, een Word-document, etc. etc. Gaan klooien met de content, moet je zien te vermijden.
Mark L
Mark L
16 jaar geleden
 
0 +1 -0 -1
@pgFrank:

Ja, ik denk (weet het zeker) dat je gelijk hebt.. en toen ik de PDO tutorial van Blanche had gelezen, wilde ik ook wel aan PDO beginnen...

Maar 1 of andere [minder leuke] host gebruikt antiek... oftewel ik moet het nog met PHP 4 doen... En daar deed PDO het niet op :(

Maar was het idee ook slecht om de data voordat je iets doet te controleren?
Frank -
Frank -
16 jaar geleden
 
0 +1 -0 -1
Het idee van controle is niet verkeerd, het is zelfs een must! Het probleem is alleen dat je niet met 1 of 2 functies kunt voorzien in alle controles die je wilt uitvoeren.

Zaken die met een database te maken hebben, moeten dus in de database-classe gebeuren, dat kun je niet fatsoenlijk daarbuiten doen. PDO is een oplossing, maar er vele duizenden database-classes te downloaden die het ook op PHP 4 doen.

Een controle op bv. een emailadres is weer heel anders dan een postcode. Ook controles op GET, POST en COOKIE waardes zijn verschillend. Althans, dat zijn ze bij mij wel. Een GET of COOKIE kan ik met een eenvoudige preg_match controleren, alleen a-z, 0-9 en een spatie zijn toegestaan. De rest mag niet. Een POST kan vanalles zijn, dat is dus altijd maatwerk.

Maar het idee van controles is uitstekend, dat mag je nooit vergeten!
Mark L
Mark L
16 jaar geleden
 
0 +1 -0 -1
Hmm.. en alleen die checks, voordat er iets word ge-output/iets naar de db word gestuurd? Is dat handig? Of heeft dat eigenlijk weinig nut?

Ik bedoel dan niet de veranderingen, zoals addslashes...
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Remco S
Remco S
16 jaar geleden
 
0 +1 -0 -1
mysql(i)_real_escape_string().

Als ej dat gebruikt lijk het mij ook we veilig.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. input-checken

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.