| 

.NET C# Java Javascript Exception

6
Hallo Leute,

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.

Gruß

Dani
19.10.2011
spicejam 853 2 6
4 Antworten
4
Hi,

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.

Hier noch der Wikipedia-Artikel dazu.
19.10.2011
Andreas Richter 1,7k 1 2 8
Danke ich glaube das war, was ich gesucht habe :)
spicejam 19.10.2011
Bringt aber kein Security Gewinn
Jaksa 28.10.2011
2
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 :)

[1] http://www.php.net/manual/de/function.mysql-escape-string.php
[2] http://php.net/manual/de/function.str-replace.php
[3] http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html
[4] http://www.doctrine-project.org/
19.10.2011
Lord_Pinhead 778 1 8
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.
spicejam 19.10.2011
Danke für den Tipp mit Regex und Escape :) Bin ziemlich neu im Thema Sicherheit.
spicejam 19.10.2011
1
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.
19.10.2011
Xantiva 2,3k 2 9
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.
spicejam 19.10.2011
1
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.:
getUserNameByID($id);
setUserNameByID($id);
getUserMailByID($id);
setUserMailByID($id);
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
19.10.2011
Karill Endusa 1,5k 1 9
Danke für die Tipps! "mysql-real-escape" kommt mir bekannt vor aber "htmlentities" ist mir neu wieder was zum lernen, vielen Dank! :)
spicejam 19.10.2011

Stelle deine Php-Frage jetzt!