Hallo,
Afgelopen nacht zijn al mijn php script door een hacker veranderd. In elk script was onderaan een javascript toegevoegd met daarin een iframe.
Ik heb de helpdesk gebeld met de vraag hoe dat kon.
Volgens de helpdesk zou ik mijn scripts moeten beveiligen.
Oke, maar hoe??
Hoe is het mogelijk dat een of andere Rus of diens computer mijn php bestanden kan overschrijven?
Inmiddels al mijn wachtwoorden veranderd, ftp en sql, maar is dat afdoende?
Volgens de hoster is er geen gebruik gemaakt van ftp.
mijn vraag: hoe kan ik dit in de toekomst voorkomen?
Zoals gezegd door Evert kun je een ' en " gewoon in je database opslaan als ' en ". De functie mysql_real_escape_string() zorgt ervoor dat de karakters tijdelijk ge-escaped worden, maar gewoon un-escaped in je database terecht komen.
En database heeft er namelijk geen enkel probleem mee als er een ' of " in de database staat. Een database heeft er pas problemen mee als je een ' en een query zet.
Edit:
rvw schreef op 04.12.2008 16:22
ik gebruik altijd de pdo prepare.
Helemaal perfect. Dan worden karakters automatisch ge-escaped, heb je dus geen enkele van al die functies meer nodig.
Alleen dat wel te weinig wordt vermeld in beginnende tutorials.
Toen ik begon iig wel.
Denk dat je daar zelf snel genoeg achter komt als beginner als je eens een testberichtje gaat invoegen in je zelfgemaakte nieuwssysteem/cms/weetikveel.
ik gebruik altijd de pdo prepare.
Ik ook. :-) Weet eigenlijk niet waarom, werkt wel lekker vind ikzelf.
Maar om even terug te komen op mijn website,
Ik heb alles zo uitgevoerd zoals jullie mij hebben uitgelegd,
kan ik mijn website nu beschouwen als zijnde voldoende veilig?
PDO is te omslachtig naar mijn idee.. Een class per soort SQL werkt beter (dus aparte MySQL, pgSQL, Oracle class..)
@ Hieronder: Nee, als je het doet, moet je het wel goed doen. Alles waar My voor staat, dumpen. Neem dan gewoon gelijk pgSQL ;-)
Even een kopietje van wat ik gister ergens ander had gepost:
[quote]
Met PDO scheer je ze juist niet over één kam vanwege de adapters. Ga eens lezen over het Adapter design pattern, want ik mis argumentatie. Bedenk ook dat er een reden is dat iedereen in heel PHP, Java, etc, etc, gebruik maakt van PDO-achtige dingen.
Jawel, want je zult alsnog veel queries moeten aanpassen als je een andere backend gaat gebruiken. En gezien dat vaak niet gebeurt, is het veel efficienter om er iets lightweights achter te hangen, in plaats van de hele overhead van PDO.
[/quote]
PDO is niet bedoeld om gemakkelijk van back-end te kunnen veranderen, dat is gewoon een bijkomende optie die je (inderdaad) eigenlijk niet zult (kunnen) gebruiken.
Waarom dan wel PDO? PDO is gewoon een database classe met daarin alle voordelen van een classe. Een kort voorbeeldje:
Ik hoef niet te checken of de query wel gelukt is of niet, ik krijg geen formulier met een lege <select> omdat de query mislukt is.
Wanneer ik meerdere Query's uit wil voeren start ik gewoon een transaction uitvoeren met een rollback() in de Catch. Ik hoef dus niet iedere query opnieuw te controleren en in iedere controle bij en fout een rollback uit te voeren.
Dat is de kracht achter PDO. Niet het snel kunnen verwisselen van database, want dat gebruik je toch niet.