Ich höre immer wieder, dass man aus Gründen der Sicherheit Querys etc. auslagert. Wie macht man sowas? Reicht es wenn es eine includierte Query Datei ist oder sollte alles komplett getrennt werden? Ich wüsste auch nicht unter welchem Keyword ich nach einen Schema suchen könnte. Ich hoffe ihr versteht was ich meine.
ich bin zwar kein PHP-Kenner, aber ein Stichwort zur Suche ist MVC - Model View Controller. Das ist ein Muster zur Strukturierung von Anwendungen mit dem Ziel den Datenzugriff (Model) von der Ansicht (View) zu trennen. Dazwischen hängt der Controller, der beide Welten miteinander vereint.
Meiner bescheidenen Meinnung nach, bringt dir das nichts. Sicherheit bekommst du durch prüfen deiner Get und Post Variablen mit Regex, Escapen von Steuerzeichen wie dem Semikolon, Hochkomma etc. (z.B. mit [1] oder einem einfachen Zeichen ersetzen [2])
Deine SQL´s kannst du, wenn du willst, auch als Stored Function hinterlegen ([3]), und im PHP Script rufst du nur deine Funktion mit
CALL myfunction(para1);
auf.
Ansonsten gäbe es noch die möglichkeit ein ORM Framework dafür zu verwenden wie [4] . Oder du nutzt gleich ein MVC Framework ala Symfony oder CakePHP, da sparst du dir viel Arbeit :)
Bis jetzt mach ich dies genau so; ich habe in meinem System meine PHP's zur Darstellung und Dynamik der Webpräsenz und meine PHP's mit Funktionen, Konstanten, Variablen und Querys.
Ich bin mir nicht sicher, ob ich Dein "Query" richtig einordne. Mal schreibst Du von MYSQL und dann von einer Query Datei ...
Bzgl. MYSQL sollte man möglichst keine Query Strings selber zusammensetzen, sondern "Prepared Statements" verwenden. Das reduziert die Gefahr von SQL - Injections => z. B. http://www.php.net/manual/de/pdo.prepared-statements.php
Wenn es um das Einbinden von Dateien geht, dann verfolgen aktuelle Frameworks (z. B. Symfony 2.0) das Konzept in den öffentlich Zugänglichen Pfad (Webroot) nur einen Bootstrapper (index.php) und Ressourcen wie CSS und Bilder zu legen. Der Rest liegt in einem nicht öffentlich zugänglichen Pfad und kann auch so schon gar nicht mehr aufgerufen werden.
Mit MySQL will ich einfach nur nahelegen um welchen Datenbankstanard es geht, mit meinen Querys meine ich die Abfragen dieser Datenbank; Klar ist es nicht die eleganteste Lösung die Querys direkt im Code deiner Ausgabedatei zu hinterlegen. Das mit den "Prepared Statements" höre ich auch zum ersten mal.. Bin aber durchaus dankbar, es hört sich sehr interessant an und könnte bei einer Kombination aus dem MVC- Beispiel von Andreas etwas übersichtliches und variables ergeben.
Die Methode, die SQL-Aufrufe in eine extra Datei auszulagern und für bestimmte Datenbankabfragen Getter- und Setter-Funktionen in PHP bereitzustellen, erhöht zumindest die Übersichtlichkeit :) Bsp.:
Sowas hilft zumindest bei größeren Projekten enorm.
Was Sicherheit angeht:
mysql_real_escape_string($string);
und
htmlentities($string, ENT_QUOTES);
sollten helfen
Ich habe mir in einer meiner Dateien mal ne Funktion abgelegt, die beides abdeckt. Am besten alles, was in die Datenbank geht oder aus der Datenbank kommt, damit erst einmal "behandeln".
Willst du dann trotzdem HTML anzeigen lassen, dann würde ich zu BBCodes raten... diese können gefahrlos in der Datenbank hinterlegt werden und werden von den Sicherheits-Funktionen nicht zerstört :D