Als je code post, beperk je dan tot relevante(!) delen(!) code; een compleet script dumpen en ons dan laten zoeken naar de fout is niet de bedoeling. M.a.w.: ontdoe je script(s) van alle overbodige zaken
(ik noem even de htmlent() functie en de ellenlange array-assignments in je code als voorbeeld: die zijn totaal irrelevant voor je probleem) en post die middels
code tags in je topic en dus niet op externe sites als pastebin. Als vandaag-of-morgen pastebin (of random-externe-site-X) besluit ermee te stoppen of andere URL's te gaan gebruiken is je topic waardeloos omdat niemand je code meer kan inzien. Niets zo frustrerend als je middels een search op een topic stuit dat mogelijk gerelateerd is aan je probleem om er dan achter te komen dat de essentie van 't topic niet meer te vinden is; dat moet je zelf ook ooit ervaren hebben, niet?

Daarbij is het handig als je zaken als e-mail adressen, wachtwoorden etc. die niet relevant zijn voor 't eigenlijke probleem 'verbergt' door, bijv., van e-mail adressen '
foo@domain.com' te maken of van wachtwoorden iets als '
******'. Zullen de eigenaren van die mailadressen leuk vinden nu ze zo lekker publiek op pastebin staan en lekker geindexeerd kunnen worden voor spamdoeleinden
Wat betreft je probleem: begin eens bij stap 1: debuggen (
Debuggen: Hoe doe ik dat?).
Verder: voor het omzetten van tekens naar
html entities zijn gewoon bestaande functies, gebruik die dan ook, en html entities zijn geenszins een vorm van
SQL injection preventie dus daar moet je zéker ook naar kijken en, bijv.,
Parametrized Queries overwegen als alternatief. Encoden/escapen naar, bijvoorbeeld, HTML entities maar ook SQL parameters, RTF, CSV of wat dan ook doe je altijd
context afhankelijk. Het is dus niet slim om meteen al je POST parameters door HTML entities te raggen. Als je ze later in je DB wil stoppen moet je ze, en dat doe je dus ook, weer overal gaan lopen
html_entity_decode'n. Bewaar de waardes (lees: user-input) gewoon as-is en wanneer je ze in een HTML context gebruikt (en bijv. naar de browser gaat sturen) ga je ze pas door
htmlentities() halen. En als je, zoals jij doet, een template-engine gebruikt: gebruik dan
in de template gewoon de mogelijkheid om aan te geven welke velden met HTML entites escaped moeten worden; dan weet je ook zeker dat 't maar op 1 plaats gebeurd. Voor je het weet doe je 't 2 of 3 keer of nog vaker en dat geeft een puinhoop en anders op z'n allerminst verwarring. Ik weet niet waar '
send_mail' vandaan komt (als in: welk framework, if any, gebruik je?) maar hou er rekening mee dat ook daar (als in: een e-mail) 't een-en-ander gecontroleerd moet worden om te voorkomen dat kwaadwillenden
headers gaan lopen injecten oid. Dus verzeker je er van dat die functie dat correct afhandelt.
[edit]
Ik vermoed, afgaand op $db-Query, $db->nextid, message_die() en nog wat zaken dat je phpBB gebruikt? In dat geval moet je, o.a., eens kijken naar
sql_escape wat ook staat aangegeven bij
sql_query:
If you want to use any variable in your query, you should use (If it isn't a integer) $db->sql_escape() to be sure the data is safe.
Los daarvan lijkt me dat spul allemaal nog mysql_ functies te gebruiken die inmiddels allemaal
deprecated zijn; ik zeg 't maar zodat je 't in je achterhoofd kunt houden. Het is niet direct een groot probleem, maar toch.
Ik kon wat betreft m'n eerdere opmerking over 'html escaping in de template i.p.v. in de code' niet zo snel iets in
hun documentatie vinden dat er op wees dat dat ook daadwerkelijk kan in hun templating engine dus wat dat betreft zit je waarschijnlijk goed om die escaping aan de "code kant" te doen. Neemt niet weg dat je nog steeds niet zomaar je POST values meteen door htmlent(ities) moet raggen maar dat doet waar de
context om een htmlent(itites) vraagt.
Ik kan de
send_mail() functie in de PHPBB documentatie zo snel
niet vinden dus die opmerking over mogelijke header injection staat wel nog steeds.
[
Voor 71% gewijzigd door
RobIII op 13-03-2013 01:53
]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij