StratoFarmer schreef op maandag 12 maart 2007 @ 10:36:
Als je maximale flexibiliteit wilt bieden en toch heel veilig dan zou ik kiezen voor een eigen mini taal die je om kunt zetten naar sql statements. Is wel wat werk, maar je hoeft je uiteindelijk veel minder zorgen te maken over beveiliging/opslag etc. Het 'Interpreter' design pattern dus eigenlijk.
en dat is dus absolut niet veilig. dat is "security trough obsecurity" en daarvan is bewezen dat het niet werkt. enkel als toevoeging op een al veilige beveiliging.
het probleem blijft bestaan, het probleem waar het hele SQL-injectie gevaar omdraait. het feit dat gebruikers directe en ongecontroleerde elementen kunnen toevoegen aan je sql-query. en of dat nou in sql gebeurt of in een eigen ontworpen taal die wordt omgezet naar een sql-query maakt dan ook niet uit.
waar het wel bij kan helpen is dat het makkelijker wordt om de sql te controlleren. je zou bijvoorbeeld een vast-teken kunnen opnemen in je taal dat als einde van de query wordt gezien. en de omzetting limiteren tot een enkele query of bijvoorbeeld alleen maar 1 enkele where-clausule toelaten.
het belangrijkste is dat je NOOIT input direct mag gebruiken in de opbouw van je sql-query. als je daar als niet aan voldoet dan is elke andere beveiliging zinloos. controlleren wat de user je toestuurt is de enige manier om een sql-injectie te voorkomen.
@Toost: sorry had je post niet gelezen dat je meerder files gebruikte, wat overigens nog slechter is voor de disk I/O dan een enkele file, maarja dan zit je weer met het file-locking issue.
@pietje63: dat zou een goede manier zijn de query door te geven nadat deze is gecontrolleerd en opgebouwd. vergeet alleen niet dat je de query MOET deleten na dat deze is gebruikt en om ook een Time-To-Live waarde mee te geven zodat de query BINNEN N-Seconden moet worden gebruikt en anders als ongeldig wordt gezien. ook zou je een cron-job moeten hebben die alle querie's verwijderd die immiddels de TTL zijn gepasseerd.
@Reckor: localhost is alleen toegangkelijk vanuit de machien zelf. de inhoud van het verkeer maakt dus niet uit. de packetjes zullen nooit de machine verlaten. een IP-LOCK zou werken maar uit-eindelijk moet je toch de input controlleeren en waar die vandaan komt maakt dan ook niet meer uit.
PMA past zich inderdaad aan aan de rechten van de ingelogde gebruiker.
@Raceeend123: bij mysql zitten de rechten altijd in een aparte database en veel hostings maken 1 database per account aan. en 1 gebruiker per account die alleen en enkel rechten heeft op die database. wat hier de beste oplossing zou zijn om een 2e gebruiker aan te maken en die enkel de benodigde rechten te geven op de database die bij die account hoort. 2 gebruikers dus, 1 voor de site admin en 1 voor alleen deze speciale benodigdheid.