Situatieschets:
Er draait hier een MuOnline server. Dit is een MMORPG die gebruikmaakt van een MSSQL database. Eraan gekoppelt (voor gebruikersfuncties als account aanmaken, wachtwoord wijzigen, etc etc) is een PHP website grotendeels door mij geschreven. Sinds enkele dagen verandert een hacker constant dingen in de database en liet vandaag zelfs een berichtje achter.
Gegevens:
Webserver: Apache 1.3.31 icm PHP 5.0.1
Database: MS SQL Server Enterprise Evaluation Edition 2000 SP3
OS: Windows XP prof SP2
Connectie PHP -> database dmv mssql_query's, Game -> database dmv ODBC links
De website in kwestie.
Toegepaste veiligheidsmaatregelen:
• Aparte weblogin met gelimiteerde toegang aangemaakt. Helaas is het voor functionaliteit noodzakelijk dat deze login wel update en set rechten heeft op de database.
• Username / pass voor de SQL server opgeslagen in een config.htpasswd file, alle .ht files zijn als DENY ALL ingesteld in Apache's config files. AFAIK zou dit cross-site scripting moeten voorkomen.
• Meerdere SQL injectie preventie scripts toegepast. De meest aggresieve (en effectieve) bestaat hieruit:
Die laatste controleert alle veriabelen die gebruikt worden door MSSQL_query's, maar was echter een noodmaatregel toen bleek dat m'n andere scripts niet werkten aangezien het eigenlijk zoveel variabelen uitfiltert dat er functionaliteit verloren gaat. Niet voldoende helaas, aangezien iemand nog steeds dingen kan wijzigen in de database.
Het probleem:
zelf ben ik geen ervaren web devver, en van beveiliging heb ik al helemaal geen kaas gegeten. Ik ga er vanuit dat ik iets enorm over het hoofd zie, maar heb geen idee wat. Een handig artikel in de FAQ over security vermeld oa cross-site scripting en (SQL) variabele injecties, maar dat kan AFAIK geen probleem meer zijn. Nav dat artikel wel zojuist 'register_globals' uitgezet, geen idee of het helpt, veel functionaliteit mis ik er gelukkig niet door
Alle tips en mogelijke oplossingen hoor ik graag!
Er draait hier een MuOnline server. Dit is een MMORPG die gebruikmaakt van een MSSQL database. Eraan gekoppelt (voor gebruikersfuncties als account aanmaken, wachtwoord wijzigen, etc etc) is een PHP website grotendeels door mij geschreven. Sinds enkele dagen verandert een hacker constant dingen in de database en liet vandaag zelfs een berichtje achter.
Gegevens:
Webserver: Apache 1.3.31 icm PHP 5.0.1
Database: MS SQL Server Enterprise Evaluation Edition 2000 SP3
OS: Windows XP prof SP2
Connectie PHP -> database dmv mssql_query's, Game -> database dmv ODBC links
De website in kwestie.
Toegepaste veiligheidsmaatregelen:
• Aparte weblogin met gelimiteerde toegang aangemaakt. Helaas is het voor functionaliteit noodzakelijk dat deze login wel update en set rechten heeft op de database.
• Username / pass voor de SQL server opgeslagen in een config.htpasswd file, alle .ht files zijn als DENY ALL ingesteld in Apache's config files. AFAIK zou dit cross-site scripting moeten voorkomen.
• Meerdere SQL injectie preventie scripts toegepast. De meest aggresieve (en effectieve) bestaat hieruit:
PHP:
1
2
3
4
5
| if (eregi("[^a-zA-Z0-9_-]", $variabele) { echo ("SQL injection detected"); exit(); } |
Die laatste controleert alle veriabelen die gebruikt worden door MSSQL_query's, maar was echter een noodmaatregel toen bleek dat m'n andere scripts niet werkten aangezien het eigenlijk zoveel variabelen uitfiltert dat er functionaliteit verloren gaat. Niet voldoende helaas, aangezien iemand nog steeds dingen kan wijzigen in de database.
Het probleem:
zelf ben ik geen ervaren web devver, en van beveiliging heb ik al helemaal geen kaas gegeten. Ik ga er vanuit dat ik iets enorm over het hoofd zie, maar heb geen idee wat. Een handig artikel in de FAQ over security vermeld oa cross-site scripting en (SQL) variabele injecties, maar dat kan AFAIK geen probleem meer zijn. Nav dat artikel wel zojuist 'register_globals' uitgezet, geen idee of het helpt, veel functionaliteit mis ik er gelukkig niet door
Alle tips en mogelijke oplossingen hoor ik graag!