Ich bekomme gemischte Signale. Die Warnung in der PDO-Dokumentation scheint ziemlich klar zu sein, dass das Auslassen des Try-Catch die Sicherheit beeinträchtigen könnte. Jedoch dieser Thread deutet darauf hin, dass es nicht wirklich notwendig ist. Meiner Meinung nach wäre es ziemlich ärgerlich, jede Abfrage in einen try-catch zu legen. Irgendwelche Ratschläge, wie man damit umgeht?
Es besteht ein Sicherheitsrisiko, aber Sie müssen nicht überall versuchen / fangen. Wenn Sie keine Ausnahme abfangen, besteht die Gefahr, dass die Fehlermeldung der Ausnahme (die vertrauliche Informationen enthalten könnte) den Benutzern angezeigt wird.
Aber wie in der Dokumentation angegeben, können Sie stattdessen einen Ausnahme-Handler hinzufügen . Durch die Weiterleitung zu einer allgemeinen Fehlermeldung können Sie verhindern, dass Ihren Benutzern vertrauliche Informationen aus Fehlermeldungen angezeigt werden.
Das Setzen eines generischen Fehler-Handlers scheint in jedem Fall sehr sinnvoll zu sein. Sie möchten Ihren Benutzern keine kryptischen Fehlermeldungen anzeigen. Selbst wenn Sie mit dem Ansatz "try / catch everything" arbeiten, ist es schwierig, 100% ig sicher zu sein, dass Sie alle möglichen Ausnahmebedingungen erfasst haben. Daher sollte der Exception-Handler weiterhin als Fallback verwendet werden.
PDO hat drei konfigurierbare Fehlermodi . Standardmäßig wird nur ein Fehlercode festgelegt und keine Ausnahme ausgelöst.
Sie sollten jedoch PDO::ERRMODE_EXCEPTION
verwenden. Die Art und Weise, wie PHP und PDO normalerweise mit Fehlern umgehen (d. H. Leise mit dem Code weitermachen und das Falsche tun, ohne dir zu sagen ) ist absolut verrückt und ein großer Grund für die Grausamkeit von PHP.
Wenn bei Ihrer Anfrage etwas schief geht, müssen Sie die Ausführung stoppen und eine Ausnahme auslösen, damit Sie eine eindeutige Rückverfolgung haben und das Problem finden und beheben können.
Außerdem ist es viel einfacher (d. h. weniger "ärgerlich"), try-catch zu verwenden, als nach jeder einzelnen Abfrage errorCode
und errorInfo
zu überprüfen. Sie sollten try-catch nur verwenden, wenn Sie die Möglichkeit des Fehlers erwarten und etwas dagegen tun können - andernfalls sollten Sie die Ausnahme einfach auflösen. Wenn es ein unerwarteter Fehler ist, liegt das wahrscheinlich an einem Fehler in Ihrem Code und Sie sollten darüber über die Ausnahme Bescheid wissen, damit Sie es beheben können!
Wenn Sie etwas Besonderes mit dem Melden der Ausnahme machen möchten (zB pretty-print es, senden Sie eine E-Mail, was auch immer), dann registrieren Sie ein Standard Exception Handler , um alle nicht abgefangenen Ausnahmen zu behandeln. Auf einem Produktionssystem sollten Sie einen Standardausnahmebehandler registrieren, der eine generische 500-Seite anzeigt und Fehlerdetails anzeigt, und den gesamten Traceback an anderer Stelle für das Debugging protokollieren.
Wenn ein Fehler auftreten kann , wird es schließlich . Sie müssen mit jedem möglichen Fehler umgehen, den Ihre PDO-Abfragen unabhängig von der Umgebung, in der Sie ausgeführt werden, generieren können. Machen Sie die Annahme (wie die Jungs in dem Thread, den Sie gepostet haben), dass, da dies ein Produktionssystem ist, versuchen..Catch ist nicht notwendig ist dumm, IMHO. Fehler werden nicht nur beim Debuggen von Code ausgelöst, sondern können auch auf einem Produktivsystem auftreten. Persönlich mag ich Kontext um die Fehler, die ich in meinen Protokollen sehe, also verwende ich try..catch um meine Abfragen.
Dies hat auch nichts mit den Fehlern zu tun, die Sie Ihren Benutzern präsentieren. Ich finde, dass die Verwendung des Wortes Sicherheit die Dinge in diesem Kontext vage macht. Ihr System sollte niemals kryptische Fehlermeldungen (die potenziell sensible Daten enthalten könnten) für Benutzer anzeigen, unabhängig davon, wie Sie mit Fehlern umgehen (dies ist nicht PDO-spezifisch).
Dafür gibt es mehrere Möglichkeiten:
Mein 2c.