[PHP] http-headers controleren op SQL-Injection / XSS?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • xilent_xage
  • Registratie: Februari 2005
  • Laatst online: 23-09-2024
Hallo!

Bij het beveiligen van mijn website gebruik ik een soort dubbele check:

- In eerste instantie roep ik een functie aan die uitgaat van het principe "all input is evil". Hier zoek ik naar verdachte patronen voor intrusion detection, en vervolgens sanitize ik alle input.
- In tweede instantie probeer ik bij het uitvoeren van queries goed te kijken naar mogelijkheden tot injection en bij voorkeur gebruik te maken van switches waar mogelijk.

Mijn probleem speelt in het eerste traject. Na het lezen van dit bere-interessante artikel heb ik besloten ook de http-headers als input te beschouwen, en deze zo goed mogelijk te controleren en sanitizen. Temeer daar deze gegevens worden gebruikt in mijn stat-module (bijv http-referrer, user-agent en accept-language) en ook worden weggeschreven in de database.

Ik kan mij globaal een voorstelling maken van de mogelijkheden voor SQL-Injection dmv http-headers, maar weet niet goed waar ik op moet checken bij de detection en het sanitizen van deze headers.

Normaal gesproken zou ik zoeken naar patronen als "'%20%22-,;() en natuurlijk insert, update, select, or, and enz. Maar ik kan me voorstellen dat een user-agent prima bijvoorbeeld " and " kan bevatten, om nog maar te zwijgen van ;,. enz.... >> Vraag 1: Naar welke patronen zou ik het beste kunnen zoeken voor de detection?

Voor het sanitizen gebruik ik doorgaans mysql_real_escape_string en addslashes. Dat gaat hier natuurlijk niet goed. >> Vraag 2: Zijn er mensen die hier iets handigs voor gebruiken? Of kan ik het beste gewoon de strings uit de detection verwijderen?

bvd,
X.

Acties:
  • 0 Henk 'm!

  • ZroBioNe
  • Registratie: Augustus 2001
  • Niet online
Je kan ook alleen standaard headers doorlaten.
Dus een whitelist maken, ipv een blacklist.

Je moet dan wel afwegen wat makkelijker (kleiner) is. Ik denk persoonlijk dat je niet alle header type's hoeft te checken, maar een aantal.
Dit kan je dan weer in een database zetten, zodat het wat makkelijker onderhoudbaar is.

Dit lijkt me trouwens niet echt een performance-verbetering :?

Acties:
  • 0 Henk 'm!

  • TRON
  • Registratie: September 2001
  • Laatst online: 09:03
Mijns inziens werken de headers net als een post-scope en de get-scope. Dus je kan ze hetzelfde behandelen. Double- en single-quotes vervangen door de betreffende html entities en je lost al veel problemen op. Integers in je query door (int) laten afvangen en je lost daar ook een paar problemen mee op.

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


Acties:
  • 0 Henk 'm!

  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 27-04 11:53
In principe zou veilig coden voldoende moeten zijn; validatie op alle gebruikte input zoals je zelf al zei. Wil je toch een automatische controle naar de HTTP headers laten loeren, controleer dan de querystring en cookie gegevens op "script", "noscript", "meta", "form" etc. SQL statements zijn inderdaad ook zinvol om te filteren. Naast hetgeen wat jij noemt zou ik dan vooral "UNION SELECT" in de gaten houden omdat veel injections daarop zijn gebaseerd (mits je MySQL>4 gebruikt).

Acties:
  • 0 Henk 'm!

  • xilent_xage
  • Registratie: Februari 2005
  • Laatst online: 23-09-2024
bedankt voor de feedback!