How to not write PHP
I know, I know, who am I say?
Well, anyway, I came across the following link tonight:
http://pastebin.ca/592702
Here is a quick list of what is wrong:
- There is absolutely no control-flow, an attacker can do anything he wants and controls your page with simple GET.
- Values from GPC are not quoted properly in SQL queries.
- Instead of clearly seperating PHP code (backend) and HTML (frontend) all is
messedmixed up. - Use of the dreaded shorttag - I wish PHP would get rid off that soon!
Comments
Mein Code sieht leider nicht viel besser aussieht als dein Beispiel, wie man es nicht machen sollte :p
Schick mir mal nen Beispiel, wie man es richtig macht ;)
Wenn Du das shorttag abschaltest, dann kannst du wieder "<?xml" schreiben, ohne es in ein echo zu kapseln.
Wie man es meiner Meinung nach richtiger macht, hab ich ja beschrieben oder angedeutet. Im Bezug auf quoting in SQL-Abfragen, waere das einfachste quoting), addslashes(stripslashes($foo)) zu machen, obwohl es natuerlich auch Funktionen wie mysql_real_escape_string gibt.
Generell waere es auch besser, wenn man mit Typen arbeitet. Denn obwohl alles in PHP ganz schnell ein String ist, gibt es zum Beispiel auch noch viele Andere - ganze Zahlen, Dezimalzahlen, Objekte, Listen usw..
Die SQL-Abfrage wird zum Beispiel auch schneller wenn Du Dich am Typ orientierst.
Oder bei String:
Generell ist es viel uebersichtlicher, wenn man zum Beispiel die Datenbankabfragen vor dem Layout (HTML, usw.) macht, damit man ggf. auch einen Status darstellen kann - "wurde nicht gefunden", "ein Fehler ist aufgetreten" usw..
Viel besser ist:
Datenbankzugriffe per function..
Aber so recht übersichtlich ist das bei mir trotzdem nicht, und typen benutze ich auch nicht =)
Wenn Du PHP5 hast, dann wuerde ich Dir das Zend Framework oder Symfony empfehlen. Bei PHP4 am ehesten CakePHP.