Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP/SQL-Datenbankabfrage bewährte Verfahren und Sicherheit

Javiers Antwort mit dem OWASP-Link ist ein guter Anfang.

Es gibt noch ein paar Dinge, die Sie tun können:

  1. In Bezug auf SQL-Injection-Angriffe können Sie eine Funktion schreiben, die allgemeine SQL-Anweisungen wie " DROP " oder "DELETE * WHERE" wie folgt aus der Eingabe entfernt:

    *$sqlarray =array( " DROP ","or 1=1","union select","SELECT * FROM","host auswählen","Tabelle erstellen","FROM Benutzer","Benutzer WO");*

    Schreiben Sie dann die Funktion, die Ihre Eingabe gegen dieses Array prüft. Stellen Sie sicher, dass das Material in $sqlarray keine allgemeine Eingabe Ihrer Benutzer ist. (Vergiss nicht, strtolower dafür zu verwenden, danke lou).

  2. Ich bin mir nicht sicher, ob Memcache mit PHP 4 funktioniert, aber Sie können mit Memcache einen gewissen Spam-Schutz einrichten, indem Sie nur einer bestimmten Remote-IP-Adresse X-mal in Y-Zeiträumen Zugriff auf die Seite process.php gewähren.

  3. Privilegien sind wichtig. Wenn Sie nur Einfügerechte benötigen (z. B. Auftragsbearbeitung), sollten Sie sich auf der Bestellvorgangsseite mit einem Benutzer in die Datenbank einloggen, der nur Einfüge- und möglicherweise Auswahlrechte hat. Das bedeutet, dass selbst wenn eine SQL-Injection durchkam, sie nur INSERT / SELECT-Abfragen ausführen und nicht löschen oder umstrukturieren konnten.

  4. Legen Sie wichtige PHP-Verarbeitungsdateien in einem Verzeichnis wie /include ab. Verbieten Sie dann allen IPs den Zugriff auf dieses /include-Verzeichnis.

  5. Platzieren Sie ein gesalzenes MD5 mit dem Agenten des Benutzers + remoteip + Ihrem Salz in der Sitzung des Benutzers und lassen Sie es bei jedem Seitenladen überprüfen, ob sich das richtige MD5 in seinem Cookie befindet.

  6. Bestimmte Header nicht zulassen (http://www.owasp.org/index.php/Testing_for_HTTP_Methods_and_XST ) . PUT(Wenn Sie keine Datei-Uploads benötigen)/TRACE/CONNECT/DELETE-Header nicht zulassen.