http://sv.wikipedia.org/wiki/Normalform_(databaser) |
Hej Glenn,
Fedt at du prøver at lære at programmere - kritikken kan ofte lyde hård fra andre programmører, men man mener som regel det bedste ;-)
Jeg synes dit næste skridt som udvikler må være at kigge på biblioteker som PDO eller MySQLi. Jeg bruger personligt PDO, men du kan læse pros/cons her:
http://stackoverflow.com/questions/13569/mysqli-or-pdo-what-are-the-pros-and-cons
Der er mange fordele, foruden sikkerheden. Dit nuværende script er som mange nævner åbent for det der hedder 1. grads-injektion (1st order injection). Det er ikke umiddelbart åbenlyst for nye udviklere hvad skaden er, men problemet er, at en bruger ikke altid indtaster det data du forventer og som du sætter direkte ind i dit query. Hackere (nu bruger vi ordet bare for en god ordens skyld, selvom man dårligt skal være script kiddie for at udføre 1st order injections) kan sende data som ændrer dit query til f.eks. at spytte alverdens uønskede ting ud som du helst så ingen andre end du og brugeren selv vidste; Eller slette en hel masse data.
Hvis du insisterer på at gøre dit projekt færdigt med det nuværende MySQL-bibliotek skal du som minimum "escape" de data du sætter i query'et. F.eks.
mysql_query(sprintf('UPDATE t1 SET c1 = "%s" WHERE id = "%d"', mysql_real_escape_string($C1), mysql_real_escape_string($Id)));
Dette er stadig ikke en fuldkommen sikker løsning, men den klarer det meste.
PDO er afsikret for denne slags injections (så længe man bruger "prepared statements". Den rene "query" metode er ikke sikret!). Jeg vil dog bemærke at PDO er åbent for 2. grads-injektioner - det er dog i meget ekstreme tilfælde (kræver brug af særlig encoding og concatenation i queries)
Bemærk at "old school" MySQL-bibliotek du bruger er deprecated (fjernet) i PHP 5.6+.