...
[ Voor 99% gewijzigd door Verwijderd op 23-05-2018 15:47 ]
Invoervalidatie:Verwijderd schreef op vrijdag 20 februari 2009 @ 15:37:
Invoervalidatie
Alle informatie wordt met htmspecialchars() en addslashes() behandt. Mocht de informatie door moeten naar de database dan gebruik ik nog extra: mysql_real_escape_string()
Error handling
Standaard geef ik zo min mogelijk informatie prijs. Alle 400, 401,402,403,404,405 worden naar de homepage doorgestuurd. Daarnaast staat error_reporting altijd op 0. Behalve op test servers.
Hashing
Het lieft gebruik ik geen Md5 of sha1 maar RIPEMD-320 omdat de scriptkiddie dit algoritme hopelijk niet herkent en er nog niet zoveel crackers voor zijn. Daarnaast Salt ik wachtwoorden dus hash(wachtwoord + salt) = (dit wordt opgeslagen in de database).
Rechten
De webserver draait onder een appart hiervoor gemaakt account
[ Voor 9% gewijzigd door trinite_t op 20-02-2009 16:16 ]
The easiest way to solve a problem is just to solve it.
Volgens mij is deze shotgun-aanpak overdreven en gaat het niet eens goed werken. Escapen van variabelen is afhankelijk van de context. Een GET waarde die in de db terecht komt moet je SQL-escapen (dmv addslashes of mysql_real_escape_string), komt het in HTML terecht HTML-escapen (dmv htmlspecialchars), etc.Verwijderd schreef op vrijdag 20 februari 2009 @ 15:37:
Invoervalidatie
Alle informatie wordt met htmspecialchars() en addslashes() behandt. Mocht de informatie door moeten naar de database dan gebruik ik nog extra: mysql_real_escape_string()
Outputvalidatie
Alles wat naar de site wordt geschreven wordt zowiezo met htmlspecialchars behandled
[ Voor 0% gewijzigd door JayVee op 20-02-2009 16:39 . Reden: gr, GoT escaped mijn input niet! ]
ASCII stupid question, get a stupid ANSI!
Onzin... Data moet je escapen voor de toepassing, niet in het wilde weg wat escape functies aan lopen roepen. Dat het nu waarschijnlijk nog goed gaat is meer geluk dan wijsheid.Invoervalidatie
Alle informatie wordt met htmspecialchars() en addslashes() behandt. Mocht de informatie door moeten naar de database dan gebruik ik nog extra: mysql_real_escape_string()
Bij het afdrukken op een html pagina zul je inderdaad html special chars er overheen moeten halen, maar in jou geval had je dat bij de input ook al gedaan waardoor de boel waarschijnlijk dubbel geescaped op de pagina terecht komt.Outputvalidatie
Alles wat naar de site wordt geschreven wordt zowiezo met htmlspecialchars behandled
Het is nogal onzin om in je sessie zelf weer een timestamp te gaan zetten. Pas daarvoor gewoon de properties van de sessie aan. Daar kun je de sessietijd verlagen. Daarnaast kun je de garbage collector kans verhogen zodat sessions sneller weggegooid worden.Sessions
Om sessi hijacking te voorkomen geef ik ze niet mee aan de url parameters. Tenzij dit onvermijdelijk is. Daarnaast koppel ik een sessie aan
- Het ipadres (dus mocht de sessie gekaapt worden kan deze niet zonder spoofing worden overgenomen)
- Een timestamp (zodat deze sneller verloopt als er niks mee gebeurt).
[ Voor 24% gewijzigd door Janoz op 20-02-2009 16:44 ]
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
een reden voor hashing kan ook zijn dat je in het geval van een kraak de wachtwoorden van gebruikers niet verliest.trinite_t schreef op vrijdag 20 februari 2009 @ 16:10:
[...]
hasing:
evenzo, security by obscurity. Zowiezo, als je db gekraakt is kunnen ze toch al alle data aanpassen.
Met als nadeel dat iedereen die speciale tekens in zijn naam heeft niet door de validatie komt...Verwijderd schreef op vrijdag 20 februari 2009 @ 16:58:
Een andere optie voor input,output validatie is werken met een whitelist,
regex"^[a..zA..Z0..9];
Als de variabele daaraan voldoet mag je verder, en krijg je een 404 oid
Hij is in PRG gesloten omdat dubbelposten niet de bedoeling is.Verwijderd schreef op vrijdag 20 februari 2009 @ 16:58:
@Catch22
Nee daar is die gesloten.
Een andere optie voor input,output validatie is werken met een whitelist,
regex"^[a..zA..Z0..9];
Als de variabele daaraan voldoet mag je verder, en krijg je een 404 oid
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Ik zou gerichte inputvalidatie doen en niet alles maar door de functies die je noemt halen. Dan krijg je ranzige constructie waarbij je later de functie weer ongedaan moet maken of je geeft jezelf schijnveiligheid.Verwijderd schreef op vrijdag 20 februari 2009 @ 15:37:
Invoervalidatie
Alle informatie wordt met htmspecialchars() en addslashes() behandt. Mocht de informatie door moeten naar de database dan gebruik ik nog extra: mysql_real_escape_string()
Opnieuw, doe dit soort dingen gewoon gericht. Denk er bij ieder onderdeel over na in plaats van het zo in het wilde weg toe te passen.Outputvalidatie
Alles wat naar de site wordt geschreven wordt zowiezo met htmlspecialchars behandled
En vervolgens houdt je je niet aan de webstandaarden. Dat gaan zoekmachines die de site indexeren ook leuk vinden. Als je slechts een index.php hebt waar gebruikers recht op hebben, en verder niets, wat is er dan in vredesnaam mis met het genereren van een fatsoenlijke 404? Je moet geen veiligheidsmaatregelen gaan nemen die niets aan de veiligheid toedoen.Error handling
Standaard geef ik zo min mogelijk informatie prijs. Alle 400, 401,402,403,404,405 worden naar de homepage doorgestuurd. Daarnaast staat error_reporting altijd op 0. Behalve op test servers.
Security through obscurity is géén oplossing. Het RIPEMD-320 algoritme heeft als belangrijk nadeel dat het door veel minder mensen is getest dan MD5 en SHA1. Wie weet is dat algoritme wel veel kwetsbaarder. Als je dan toch een hashing algoritme gebruikt, doe dan een latere versie van SHA. Van de 512 bit variant zijn voorzover ik weet nog geen collisions bekend.Hashing
Het lieft gebruik ik geen Md5 of sha1 maar RIPEMD-320 omdat de scriptkiddie dit algoritme hopelijk niet herkent en er nog niet zoveel crackers voor zijn. Daarnaast Salt ik wachtwoorden dus hash(wachtwoord + salt) = (dit wordt opgeslagen in de database).
Right tool for the right job. SSL is een beveiliging tegen een man-in-the-middle-attack, niet tegen hackers. Als je een tamelijk statische website hebt waarbij geen gevoelige (inlog)gegevens worden verstuurd, dan voegt het weinig toe. Het kost daarentegen wel veel in zowel financieel opzicht als in termen van tijd en moeite.SSL
Dit gebruik ik zelfden (eigenlijk te weinig). Voornamelijk omdat klanten het teveel sores vinden om de certificaten aan te vragen.
Hoe ga je het ip-adres bepalen? Veel gebruikers internetten vanachter een proxy, waarbij per aanvraag hun remote ip kan wisselen. Als gebruikers om de vijf klikken/per ip-adres opnieuw moeten inloggen gaat de veiligheid er ook niet echt op vooruit. Als je het ip-adres bepaald aan de hand van de X-FORWARDED-FOR http-header dan heb je zojuist een nieuwe schijnveiligheid geïntroduceerd. Iedere beginnende hacker kan simpel de header zelf aanpassen.Sessions
Om sessi hijacking te voorkomen geef ik ze niet mee aan de url parameters. Tenzij dit onvermijdelijk is. Daarnaast koppel ik een sessie aan
- Het ipadres (dus mocht de sessie gekaapt worden kan deze niet zonder spoofing worden overgenomen)
- Een timestamp (zodat deze sneller verloopt als er niks mee gebeurt).
Aangezien je erom vraagt:Hebben jullie nog aanvullingen om (web)applicatie beveiliging verder uit te breiden?
Ook de paranoid opties zijn welkom en interessant
Ik ben zeke rmet je eens dat je je wachtwoorden hashed, maar daarvoor hoef je geen 'obscuur' hash algoritme gebruiken zoals RIPEMD-320. md5 of sha1 is, mits je een goede salt gebruikt net zo goed.418O2 schreef op vrijdag 20 februari 2009 @ 16:42:
Kan dit niet beter in programming ?
[...]
een reden voor hashing kan ook zijn dat je in het geval van een kraak de wachtwoorden van gebruikers niet verliest.
The easiest way to solve a problem is just to solve it.
Dat jij het algoritme niet kent, betekent niet dat het een obscuur algoritme betreft.trinite_t schreef op vrijdag 20 februari 2009 @ 19:29:
[...]
Ik ben zeke rmet je eens dat je je wachtwoorden hashed, maar daarvoor hoef je geen 'obscuur' hash algoritme gebruiken zoals RIPEMD-320. md5 of sha1 is, mits je een goede salt gebruikt net zo goed.
En de reden waarom de TS dit algoritme gebruikt IS security by through obscurity.
Apple iPhone 16e LG OLED evo G5 Google Pixel 10 Samsung Galaxy S25 Star Wars: Outlaws Nintendo Switch 2 Apple AirPods Pro (2e generatie) Sony PlayStation 5 Pro
Tweakers is onderdeel van
DPG Media B.V.
Alle rechten voorbehouden - Auteursrecht © 1998 - 2025
•
Hosting door TrueFullstaq