Advanced PHP, maar dan anders

Door EdwinG op zondag 10 oktober 2010 13:01 - Reacties (14)
Categorie: -, Views: 4.113

Via dit Topic op het forum kwam ik de volgende blogpost tegen:

7 useful functions to tighten security

Met een 'prachtige' lijst van 7 functies die de beveiliging van een PHP-script kunnen verbeteren. Daarnaast veel manieren hoe het niet moet. Helaas vermelden ze dat laatste er zelf niet bij.

Lees verder »

Valideren kun je leren

Door EdwinG op maandag 15 juni 2009 22:17 - Reacties (16)
Categorie: -, Views: 3.504

Een veelgebruikte methode om gebruikersinvoer te controleren op bepaalde eigenschappen is het toepassen van reguliere expressies.

Maar in plaats van het probleem van onbetrouwbare invoer op te lossen, komt er in veel gevallen juist een probleem bij: Zorgen dat de validatie precies doet wat het moet doen.

Zoals ik vandaag reeds in een reactie op een ander blog heb vermeld, is het niet noodzakelijk om het wiel opnieuw uit te vinden. De meeste validaties worden immers door veel meer personen gebruikt, waardoor er vaak over nagedacht is.

Ook zijn er voldoende verzamelingen te vinden van goed bruikbare expressies, zoals bijvoorbeeld De OWASP Regex Repository.

Natuurlijk blijft hetzelfde probleem bestaan. Een enkel karakter kan een wereld van verschil maken met reguliere expressies. Denk bijvoorbeeld maar aan het weglaten of toevoegen van een ^ teken aan het begin van de expressie. Enige kennis is daarom noodzakelijk om er zeker van de zijn dat de gebruikte expressie zijn doel bereikt (en niet voorbijschiet).

Enkele belangrijke karakters/eigenschappen zijn de volgende:
  • Een ^ aan het begin van de expressie geeft aan dat de onderzochte tekst moet beginnen met het gezochte patroon.
  • Een $ aan het einde van de expressie geeft aan dat de onderzochte tekst moet eindigen met het gezochte patroon.
  • Tekens die tussen [ en ] staan: Een teken uit deze groep moet aanwezig zijn.
  • . een willekeurig karakter
  • + Het teken (of de groepering) voor de + moet minstens 1 keer voorkomen
  • * Het teken (of de groepering) voor de * mag een willekeurig aantal keer voorkomen (ook 0 keer)
  • ? Het teken voor de ? is optioneel ( 0 of 1 keer voorkomen)
  • {x,y} Het teken of de reeks voor de { } moet minstens X en maximaal Y keer voorkomen
Maar het belangrijkste is wel: Wees kritisch bij het gebruik van reguliere expressies. Als er eenvoudigere alternatieven zijn, gebruik die dan. Om bijvoorbeeld te controleren of de invoer een getal is, zal is_numeric() (php) of een dergelijke functie eenvoudiger en sneller werken.

Gratis: 6 (of 2?) onbeveiligde vrienden

Door EdwinG op zaterdag 21 februari 2009 13:56 - Reacties (8)
Categorie: -, Views: 4.463

Viral marketing blijkt al tijden erg effectief te zijn. Vooral via e-mail, indien de ontvanger nieuwsgierig wordt gemaakt.

Blijkbaar heb ik 6 'vrienden' die mij willen toevoegen op een, voor mij nog onbekende, social-network site. Geen van de zes, die volgens de e-mail en de registratiepagina overigens met z'n tweeen zijn, is echter op het idee gekomen om mij via andere wegen (zoals msn, directe e-mail, of gewoon telefonisch/direct contact) hiervan op de hoogte te brengen. En aangezien ik nog nooit van die site gehoord had, heeft niemand mij ooit verteld op deze site te zitten. Eenmaal op de site aangekomen, via de speciale link in het e-mail bericht, zie ik twee personen staan die mij 'toe willen voegen'. Klikken op de foto of naam om meer details te zien kan niet. Om hun profielen te bekijken schijnt registratie noodzakelijk te zijn.....

Of natuurlijk gewoon hun profielnaam achter de url van de hoofdpagina zetten, dat helpt ook. Tot zo ver de les 'security through obscurity'.

Overigens is het gebruik van de nickname in de url geen rare constructie. Dit maakt het overigens geen veilig constructie: "Username enumeration for dummies", zogezegd.

Even verder kijken naar de inlogpagina (overigens zonder het registratieformulier in te vullen). Daar wordt om een nickname en/of e-mail adres gevraagd, in combinatie met een wachtwoord. Voor het wachtwoord gelden overigens, volgens tips bij het registratieformulier, geen eisen.

Dan maar eens kijken naar de 'nickname of e-mail adres vergeten' functionaliteit. Deze pagina toon de volgende tekst:
Hieronder vind je accounts die via jouw pc of internet verbinding zijn aangemaakt.
Gelukkig, niemand heeft mijn pc misbruikt om zich te registreren. Maar stel nou dat deze pagina benaderd wordt vanaf een 'open' netwerk, zoals een school? Zal ik dan ook de e-mail adressen van andere profielen te zien krijgen?

De volgende optie 'wachtwoord vergeten':
Vul hieronder je nickname in. Er wordt dan naar het bijbehorende e-mailadres een e-mail gestuurd met je wachtwoord.
Nu hoop ik toch echt dat ze een e-mail sturen met een methode om het wachtwoord opnieuw in te stellen, of desnoods (liever niet, eigenlijk) direct een nieuw wachtwoord. Ze gaan toch niet vertellen dat de wachtwoorden onversleuteld zijn opgeslagen?

Waarschijnlijk zal de beveiliging niet eens zo heel veel schelen in vergelijking met andere websites. Maar toch, deze sla ik over. Iemand nog een paar vrienden hebben?

Tot slot de disclaimer in de e-mail.
De informatie verzonden met dit e-mail bericht is uitsluitend bestemd voor de geadresseerde. Zij kan van vertrouwelijke aard zijn en/of persoonlijke standpunten bevatten die niet noodzakelijk met die van <site> stroken. Gebruik van deze informatie door anderen dan de geadresseerde is verboden. Openbaarmaking, vermenigvuldiging, verspreiding en/of verstrekking van deze informatie aan derden is niet toegestaan. <site> staat niet in voor juiste en volledige overbrenging van de inhoud van een verzonden e-mail, noch voor tijdige ontvangst daarvan.
Oei, ik heb de disclaimer gepubliceerd. Ben ik nu in overtreding?