Vor kurzem wurde mir vorgeschlagen, meinen Code so zu ändern, dass PDO verwendet wird, um meine Abfragen zu parametrisieren und HTML sicher in der Datenbank zu speichern.
Nun, hier sind die Hauptprobleme:
Ich habe mir http://php.net/manual/en/ref.pdo-mysql.php angesehen und verstehe nicht wirklich, wo ich diesen
$ ./configure --with-pdo-mysql
String platzieren soll ...Die Site, die ich erstelle, erfordert nur PDO für eine Seite. Obwohl ich vielleicht überlege, es neu zu schreiben, würde es eine Weile dauern und ich brauche die Seiten, um bald ausgeführt zu werden, damit ich MySQL nicht vollständig ausschalten kann. Kann ich nach der Installation von PDO weiterhin
mysql_*
Handler verwenden?
Auf dem betreffenden Server werden PHP Version 5.4.6-1ubuntu1 und Apache / 2.2.22 (Ubuntu) ausgeführt. Ich führe auch eine phpMyAdmin-Datenbank aus, wenn es darauf ankommt.
sudo apt-get update
dann die ursprüngliche Installation aus der Antwort aus.sudo apt-get install php-mysql
Das ist eine gute Frage, aber ich denke, Sie verstehen einfach falsch, was Sie lesen.
Installieren Sie PDO
Das
./config --with-pdo-mysql
müssen Sie nur anziehen, wenn Sie Ihren eigenen PHP-Code kompilieren. Wenn Sie es mit Paketmanagern installieren, müssen Sie nur die von Jany Hartikainen angegebene Befehlszeile verwenden:sudo apt-get install php5-mysql
und auchsudo apt-get install pdo-mysql
Kompatibilität mit mysql_
Abgesehen von der Tatsache, dass mysql_ wirklich entmutigt ist, sind beide unabhängig. Wenn Sie PDO verwenden, ist mysql_ nicht betroffen, und wenn Sie mysql_ verwenden, ist PDO nicht erforderlich.
Wenn Sie PDO deaktivieren, ohne eine Zeile in Ihrem Code zu ändern, haben Sie kein Problem. Aber seit Sie angefangen haben, eine Verbindung mit PDO herzustellen und Abfragen zu schreiben, müssen Sie diese behalten und mysql_ aufgeben.
Vor einigen Jahren veröffentlichte das MySQL-Team ein Skript zur Migration auf MySQLi . Ich weiß nicht, ob es angepasst werden kann, aber es ist offiziell.
quelle
Grundsätzlich ist die Antwort von Jani Hartikainen richtig! Ich habe seine Antwort positiv bewertet. Was auf meinem System (basierend auf Ubuntu 15.04) fehlte, war die Aktivierung der PDO-Erweiterung in meiner php.ini
Starten Sie den Webserver neu (zB mit "sudo service apache2 restart") -> jede Geldstrafe :-)
Um herauszufinden, wo sich Ihre aktuell aktive php.ini-Datei befindet, können Sie phpinfo () oder andere Hinweise von hier verwenden: https://www.ostraining.com/blog/coding/phpini-file/
quelle
extension=pdo_mysql.dll
, also habe ich das auskommentiert und Apache neu gestartet und es hat funktioniert.sudo apt-get install...
Befehle ausgeführt haben und nichts hat funktioniert. Schließlich habe ich diese beiden Zeilen zur php.ini hinzugefügt. Erwähnen Sie nur den Befehl zum Neustart des Apache-Servers, den Sie nach dem Speichern ausführen :sudo service apache2 restart
. Und mein php.ini-Dateipfad war/etc/php/7.0/apache2/php.ini
(Betriebssystem: Lubuntu 16.04, analog zu Ubuntu für diese Zwecke). Führen Sie es aussudo gedit <fullpath>
, um es zu bearbeiten. (gedit oder geany oder irgendein Texteditor auf Ihrem System)Installieren Sie zuerst die erforderlichen PDO-Teile, indem Sie den Befehl
sudo apt-get install php*-mysql
ausführen, wobei * ein Versionsname von PHP wie 5.6, 7.0, 7.1, 7.2 ist. Nach der Installation müssen Sie diese beiden Anweisungen erwähnen (auskommentieren, wenn sie bereits vorhanden sind)in Ihrer INI-Datei und starten Sie Ihren Server per Befehl neu
quelle
php*-mysql
. Ich habe es versuchtphp-mysql
undphp7-mysql
ohne Erfolg und dann hat diese Antwort den Deal besiegelt! Vielen Dank!Der Zweck dieser Verwendung besteht darin, eine zusätzliche Sicherheitsebene zwischen der Benutzeroberfläche und der Datenbank zu implementieren. Mithilfe dieser Ebene können Daten normalisiert werden, bevor sie in Ihre Datenstruktur eingefügt werden. (Hauptstädte sind Hauptstädte, keine führenden oder nachfolgenden Leerzeichen, alle Daten sind ordnungsgemäß gebildet.)
Aber es gibt ein paar Nuancen, die Sie vielleicht nicht kennen.
Zunächst haben Sie bis jetzt wahrscheinlich alle Ihre Abfragen in einer ähnlichen Form wie die URL geschrieben und die Parameter über die URL selbst übergeben. Bei Verwendung des PDO erfolgt dies alles auf der Ebene der Benutzeroberfläche. Die Benutzeroberfläche übergibt den Ball an das PDO, das ihn nach unten trägt und für einen 7-Punkte-TOUCHDOWN in die Datenbank einfügt. Er erhält sieben Punkte, weil er ihn dort erhalten hat und dies viel sicherer getan hat, als Informationen über die URL weiterzuleiten .
Sie können Ihre Site auch mithilfe einer Datenschicht auf SQL-Injection härten . Wenn Sie diese Zwischenschicht verwenden, die der EINZIGE "Spieler" ist, der mit der Datenbank selbst kommuniziert, können Sie sicher sehen, wie dies viel sicherer sein könnte. Schnittstelle zu Datenschicht zu Datenbank, Datenschicht zu Datenbank zu Datenschicht zu Schnittstelle.
Und:
Wenn Sie beim Schreiben Ihres Codes Best Practices implementieren, sind Sie mit dem Ergebnis viel zufriedener.
Zusätzliche Quellen:
Betreff: MySQL-Funktionen in der URL php dot net / manual / de / ref dot pdo-mysql dot php
Betreff: dreistufige Architektur - Hinzufügen von Sicherheit zu Ihren Anwendungen https://blog.42.nl/articles/introducing-a-security-layer-in-your-application-architecture/
Betreff: Objektorientiertes Design mit UML Wenn Sie wirklich mehr darüber erfahren möchten, ist dies das beste Buch auf dem Markt. Grady Booch war der Vater von UML http://dl.acm.org/citation.cfm?id=291167&CFID = 241218549 & CFTOKEN = 82813028
Oder erkundigen Sie sich bei Bitmonkey. Es gibt dort eine Gruppe, mit der man sicher viel lernen kann.
>
Wenn wir wüssten, was die Terminologie wirklich bedeutet, müssten wir nichts lernen.
>
quelle
Wenn Sie einen CakePHP-Docker-Container mit MySQL benötigen, habe ich zu diesem Zweck ein Docker-Image erstellt! Sie müssen sich keine Gedanken über die Einrichtung machen. Es funktioniert einfach!
So habe ich ein Ubuntu-basiertes Image installiert:
https://github.com/marcellodesales/php-apache-mysql-4-cakephp-docker/blob/master/Dockerfile#L8
Das Erstellen und Ausführen Ihrer Anwendung erfolgt in nur zwei Schritten (vorausgesetzt, Sie befinden sich im aktuellen Verzeichnis der App):
quelle
sudo /etc/init.d/apache2 restart
wird benötigt, um den Apache-Server neu zu starten