Ein paar grundlegende Sachen zur Sicherheit in PHP / MySQLi

Macht denn das Cachen von Daten Sinn?
Das kommt auf den Anwendungsfall an. Wie sheel schon geschrieben hat, wird das hier im Forum ja auch in ein paar Bereichen eingesetzt. Grundästzlich kann das nicht so einfach beantworten, hier müsste man halt mit Erfahrungswerten und Messungen rausfinden, wo sich das lohnt.
Ein Caching erhöht halt die Komplexität und kann neue Bugs einführen. Von daher gut überlegen und sparsam verwenden.
Ein grösseres Problem ist normalerweise auch das invalidieren des Caches. Welche gecachten Inhalte werden wann überschrieben? Wie werden diese eingetragen?

Wenn ja, wie sollte man da vorgehen? Einfach die Datenbankanfragen per Cronjob regelmäßig machen lassen und die Inhalte in eine PHP Datei auslagern, die included wird? Oder macht das keinen Sinn weil ich dann auch den Request auf die Datei habe?
Normalerweise cached die Datenbank schon bestimmte Anfragen (falls sie so eingestellt ist, query_cache bei mysql ist z.B. per default auf 0).
Wenn du aber sehr dynamische Daten hast, in Tabellen die sich oft ändern, dann wird dir der query_cache hier auch nicht viel helfen.
Das mit dem cron kann eine Lösung sein, muss aber nicht. Hiermit hast du halt für eine fixe Zeitspanne keinerlei Updates auf der Seite, alle Änderungen sind nicht sofort sichtbar. Bei facebook wäre das zum Beispiel undenkbar, hier will man ja sofort die Nachrichten bekommen oder Kommentare sehen.
Generell dürfte ein Filezugriff langsamer als eine einfache Datenbankabfrage sein. Hierfür habe ich aber keine Quelle zur Hand :)

Dort steht unter Anderem auch dass man von Weiterleitungen ala WordPress Abstand nehmen soll. Wie soll man denn dann ein großes Projekt aufbauen? Ich kann ja wohl schlecht jede Seite einzeln per PHP erstellen. Gerade in Foren etc. wo die Inhalte dynamisch erzeugt werden, wäre das ja ein Irrsinniger Aufwand.
Hier geht es nicht darum, dass du keinen Code auf verschiedene PHP Dateien aufteilst, sondern um Redirects per htaccess. Sprich der Benutzer kommt auf "index.php?topic=1234", der Server antwortet mit "Location: /blogs/meine-tolle-erfindung" und der Client ruft sich dann diese Seite ab. Bei WP oder anderen CMS läuft das in der Regel so ab, weil hier ein besseres Google-Ranking gibt.

Meint Ihr das dass komprimieren per Htaccess notwendig / zielführend ist?
Kommt darauf an, für was :) mit Komprimierung bekommst du mehr Daten über die Leitung, jedoch brauchst du CPU-Leistung um die Komprimierung durchzuführen. Es lohnt sich also nur, wenn deine Leitung ausgelastet, dein Server an sich aber eher gelangweilt ist. Dann wäre aber eventuell auch ein LoadBalancer (und extra Server) oder varnish zu überlegen. Auch die Auslagerung von statischen Inhalten (Bilder, JS, CSS) an ein CDN wäre eine Möglichkeit die Leitung zu entlasten.

Grüsse,
BK
 
Hier geht es nicht darum, dass du keinen Code auf verschiedene PHP Dateien aufteilst, sondern um Redirects per htaccess. Sprich der Benutzer kommt auf "index.php?topic=1234", der Server antwortet mit "Location: /blogs/meine-tolle-erfindung" und der Client ruft sich dann diese Seite ab. Bei WP oder anderen CMS läuft das in der Regel so ab, weil hier ein besseres Google-Ranking gibt.
Das habe ich auch so verstanden. Hatte ich eigentlich auch vor. Entsprechend habe ich schon die htaccess eingestellt.

User gibt ein domain/kategorie/datei.html und wird dann auf Index.php weitergeleitet mit entsprechenden Parametern.

Nur kann ich nicht nachvollziehen wie man es sonst regeln könnte, um es a) übersichtlich b) nutzerfreundlich und c) suchmaschinengeeignet zu regeln, ohne dabei Einbußen in der Performance zu haben?

Es lohnt sich also nur, wenn deine Leitung ausgelastet, dein Server an sich aber eher gelangweilt ist. Dann wäre aber eventuell auch ein LoadBalancer (und extra Server) oder varnish zu überlegen. Auch die Auslagerung von statischen Inhalten (Bilder, JS, CSS) an ein CDN wäre eine Möglichkeit die Leitung zu entlasten.
Also meinst du das cachen ist eher nicht so gut, lieber die Daten auf einen CND auslagern? Bietet das jeder Hoster mit an? Oder muss ich das selbst regeln?

Wenn ich z. B. Userbilder/-Dateien dort lagere, was muss ich dann bei den Uploadscripten beachten? Oder kann man PHP Script problemlos auf einen anderen Server zugreifen?
 
User gibt ein domain/kategorie/datei.html und wird dann auf Index.php weitergeleitet mit entsprechenden Parametern.
Nur kann ich nicht nachvollziehen wie man es sonst regeln könnte, um es a) übersichtlich b) nutzerfreundlich und c) suchmaschinengeeignet zu regeln, ohne dabei Einbußen in der Performance zu haben?
Geschieht die Weiterleitung extern oder rein Apache-Intern?

Also meinst du das cachen ist eher nicht so gut, lieber die Daten auf einen CND auslagern? Bietet das jeder Hoster mit an? Oder muss ich das selbst regeln?
Hierfür gibt es spezielle Dienstleister, wobei meines Wissens nach Akamai einer der grössten sein sollte. Auch CloudFlare dürfte etwas in der Richtung anbieten.

Wenn ich z. B. Userbilder/-Dateien dort lagere, was muss ich dann bei den Uploadscripten beachten?
Du lädst die Datei ganz normal zu deinem Server hoch. Anstatt die Datei aber bei dir zu speichern, schickst du diese an das CDN weiter und legst es dort ab. Wie das im Detail funktioniert, kann ich dir aber nicht sagen; Habe in der Richtung selber noch nichts gemacht.

Oder kann man PHP Script problemlos auf einen anderen Server zugreifen?
Natürlich kannst du per PHP auch zu anderen Servern. Sei es per FTP, SFTP, HTTP oder sonst wie. Musst du aber halt nur für Uploads.

Grüsse,
BK
 
Ich meinte damit, wie umgeleitet wird, es gibt hier zwei verschiedene Arten.

Entweder externe Redirects (Server sagt Client dass er mit der aktuellen URL nichts findet und bei einer anderen nochmal nachfragen soll) oder interne (Apache biegt sich einfach die RequestURI so zurecht, wie er sie braucht (Client bekommt von der Umleitung nichts mit). Speziell das "R" oder "rewrite" Flag ist hier entscheidend: https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rewriteflags

Kein R => interner Redirect => OK

Grüsse,
BK
 
So hab ich es gelöst:

PHP:
RewriteEngine on
RewriteRule ^\.htaccess$ - [F]
RewriteBase /
RewriteRule ^(.*)/(.*)/$ \./index.php?cat=$1&ziel=$2 [QSA]
RewriteRule ^(.*)/$ \./index.php?ziel=$1 [NC,L]

Ich meine aber ich habe das QSA durch NC ausgetauscht, weil es nicht funktioniert hat.
 
Nochmal in den Raum geworfen, obwohl ich weiß dass es nicht pauschalisiert werden kann:

Ab welchen Mengen, muss ich mir da überhaupt Gedanken machen drüber? Ich möchte eine Community bauen, die eigentlich recht simpel gestrickt ist.

Kann natürlich sein dass da am Tag mehrere Eingaben pro User gemacht werden, die von anderen aufgerufen und aktualisiert werden. (Das meiste wohl über die Postfächer der User). Aber ich sag mal das sind vielleicht pro User 20-30 Queries. Ist kein Facebook.

Da dürfte doch der Server bzw. die Datenbank nicht ganz so schnell an die Grenzen kommen. Ich meine dafür ist es doch ausgelegt und mittlerweile optimiert worden?

Ich sag mal so, es wäre natürlich schön wenn das Projekt irgendwann mal um die 30.000-50.000 User hat. Aber davon werden nie alle aktiv sein, schon gar nicht am selben Tag oder zur selben Zeit.

Kleiner Nachtrag:

Ich nehme mal an, dass ein Cache bei simplen WHERE Abfragen wo ich nicht alle Daten auslese, sondern nur 50 pro Seite oder so, noch nicht wirklich Sinn macht, sondern eher bei größeren Abfragen, die dem Server mehr abverlangen? Sprich mehrere Tabellen gleichzeitig ansprechen und diverse Parameter vergleichen.
 
Zuletzt bearbeitet:
Ab welchen Mengen, muss ich mir da überhaupt Gedanken machen drüber?
Ich würde mal sagen "immer". Aber Gedanken != Sorgen.
... einen passenden Server für die erwartete Userschaft bereitzustellen sollte normal sein.

Und wenns unbedingt eine allgemeine Aussage sein soll, nimm einen yc mit 1KB Speicher, da ist jedes Mysql überlastet :p (ganz unabhängig von der Optimierung)

...

bisschen was sinnvolleres noch:

a) Schreiben von Nachrichten ist nichts verglichen mit der Gesamtlast.
Die Datenbank hier behauptet, von heute früh (04:20) bis jetzt (18:20) 3.3 Millionen Selects ausgeführt zu haben (trotz ein paar Caches, und das ist noch ohne Update/Delete/...).

b) Anzahl der User ist (noch mehr als von dir vermutet) ein sehr schwaches Kriterium für Aktivität. Wenn 1/3 der User nach Registrieren überhaupt noch irgendwas tun ists schon mehr als erwartet (gemessen über die gesamten 17 Jahre, die es das Forum hier gibt. In der Internetlandschaft hat sich viel getan seit 2000 ... gibt also nicht notwendigerweise die aktuelle Situation wieder)
 
Danke euch beiden nochmal für die vielen vielen Tipps. :);)

Gestern als ich mich zum Cache eingelesen habe, ist mir etwas aufgefallen. Es war immer die Rede davon die Requests zu minimieren, weil das die Seite verlangsamt. Insbesondere weil wohl nur 6 Requests gleichzeitig abgearbeitet werden.

Das lässt mein ganzes Weltbild irgendwie in sich zusammenbrechen :D Wenn ich meine Webseite nehme habe ich schon viel zu viele. Da wären eine reset.das, eine style.css und eine responsive.css für den CSS Code. Dann lade ich die config.php, head.php, header.php, content.php und footer.php. Demnach wäre meine Art und Weise die Seite aufzubauen völlig blödsinnig? Ist da was wahres dran?

Wenn ja, wie sollte ich es sonst tun, um noch flexibel und wartbar zu bleiben. Ich meine man macht das ja nicht aus Jux und Dollerei, sondern weil später Inhalte verändern werden können, ohne das sämtliche Dateien bearbeitet werden müssen.
 
Gestern als ich mich zum Cache eingelesen habe, ist mir etwas aufgefallen. Es war immer die Rede davon die Requests zu minimieren, weil das die Seite verlangsamt. Insbesondere weil wohl nur 6 Requests gleichzeitig abgearbeitet werden.
Woher hast du diese Zahl? Das kann man generell so nicht sagen, das ist parametrierbar. Auf HTTP-Ebene ohne PHP kommt es hier auf den Apachen an, diese unterstützt schon in der Standardkonfiguration weit mehr parallele Requests. Auf PHP-Seite kannst du hier zum Beispiel mit FPM eine Pool aufbauen und wenn du willst auch 50 Prozesse aufmachen.

Das lässt mein ganzes Weltbild irgendwie in sich zusammenbrechen :D Wenn ich meine Webseite nehme habe ich schon viel zu viele. Da wären eine reset.css, eine style.css und eine responsive.css für den CSS Code. Dann lade ich die config.php, head.php, header.php, content.php und footer.php. Demnach wäre meine Art und Weise die Seite aufzubauen völlig blödsinnig? Ist da was wahres dran?
In deinem Beispiel hast du maximal 4 Requests:
* reset.css (Rein Apache)
* style.css (Rein Apache)
* responsive.css (Rein Apache)
* seite.php (alle PHP Seiten werden ja per include auf dem server zusammengesetzt)

Wenn du mit HTTP/2 arbeitest, dann verringert sich die Last noch weiter, da da über eine Connection parallel Daten abfragen kannst und die Header minimiert werden.
 
Zurück