Suchen
Inside Wiki
Nützliche Links




 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > phpforum.de Wiki > phpforum.de Wiki

PHP Wiki Dieses Wiki sammelt Lösungen, zu Problemen, welche immer wieder im Forum auftauchen.

 
 
Artikel-Optionen Ansicht
  #1  

Standard Sinnlose PHP-Konstrukte

Bitte irgendwie umbenennen, mir ist nichts besseres eingefallen. Danke! (und der Einleitungssatz ist auch schlecht^^)

PHP ist eine sehr fehlertollerante Sprache und sehr leicht zu erlenen. Aus diesem Grund haben nicht-PHP-erfahrene Leute oft einen etwas seltsamen Coding-Style. Manche dieser Konstruktionen sind unnötig und unsinnig. Hier sind einige davon.

Sprachkonstrukte mit Klammern


echo und include sind Sprachkonstrukte. Ein Sprachkonstrukt ist etwas anderes als eine Funktion. Klammer werden deshalb nicht benötigt. Es funktioniert trotzdem, weil die Klammern zur Gruppierung dienen und so ziemlich überall verwendet werden können. Hier ist eine Gruppierung aber unsinnig, da ja nichts zum gruppieren vorhanden ist.
PHP Quellcode:
// unsinnig:
echo("Hallo, Welt!");
include("datei.php");
// besser:
echo "Hallo, Welt!";
include "datei.php";


Variablen bei Ausgabe in Hochkomma


Variablen bei der Ausgabe in Hochkommas zu setzten ist unsinnig, sofern nicht noch weiterer Text ausgegeben wird. Es funktioniert trotzdem, weil PHP Variablen in Hochkommas auswertet.
PHP Quellcode:
$variable = "Hallo, Welt!";
// unsinnig:
echo "$variable";
// besser:
echo $variable;

// unter umständen sinnvoll:
echo "$variable Hier noch weiterer Text.";

// optimalerweise:
echo $variable.' Hier steht noch weiterer Text';
// Dann brauch PHP nicht den ganzen Text nach einer Variablen durchsuchen


die() zur Ausgabe von Entwicklungs-Fehlermeldungen



Der Klassiker ist wohl der hier:

PHP Quellcode:
$query='SELECT whatever FROM whereever';
$result=mysql_query($query)
  or die('Query "'.$query.'" fehl geschlagen. Fehlermeldung: '.mysql_error());


Und warum ist das nun schlecht? Naja, eine der elementarsten Sicherheitsmaximen für Webapplikationen ist, dass man einem Angreifer keine Informationen in die Hand geben sollte, die ihm seinen Angriff erleichtern. Gängiges Angriffsszenario sind hier SQL Injections, und die funktionieren nun mal nur dann anständig, wenn der Angreifer durch das System Feedback bekommt, wenn er die Lücke im System analysiert.

Kein Produktionsserver sollte also einfach so die Ausgabe von mysql-Fehlern an die Clients schicken. Hält man sich das vor Augen, so wird bewusst, dass nach Ende der Entwicklung und vor Livestart alle Skripte noch einmal auf mysql_error(), var_dump() und sonstige Debugausgaben hin untersucht werden müssen.

Das muss aber nicht sein. Grad auf Produktionsservern konfiguriert man PHP normalerweise so, dass Fehlermeldungen in ein Log fließen, nicht aber an den Browser geschickt werden. Hier können wir uns mit unseren Entwicklungs-Fehlermeldungen und -Debugausgaben dran hängen, indem wir auf die Funktion
DOKU-VORLESE-SERVICE(TM)
bool trigger_error(string error_msg[, int error_type = E_USER_NOTICE])
Generates a user-level error/warning/notice message
oder auf Exceptions zurück greifen.

Besser wäre unser Beispiel von oben also, wenn man es so schreibt:

PHP Quellcode:
$query='SELECT whatever FROM whereever';
$result=mysql_query($query)
  or trigger_error('Query "'.$query.'" fehl geschlagen. Fehlermeldung: '.mysql_error(),E_USER_ERROR);


Auch dieser Code unterbricht bei richtig konfiguriertem Error-Handler die Skriptausführung. Zusätzlicher Vorteil ist, dass bei der Fehlerausgabe auch die Datei und Zeilennummer automatisch mit angegeben werden.

Und: Sobald man diesen Code auf einen vernünftig konfigurierten Produktionsserver schiebt, wird er sein Wissen zumindest nicht an potentielle Angreifer weiter geben.


Erstellt von Sebbl, 09.04.2010 am 18:28
Zuletzt bearbeitet von woskamp, 22.04.2010 am 20:09
4 Kommentare , 11225 Betrachtungen

Dieser Text steht unter der GNU-Lizenz für freie Dokumentation


 

Lesezeichen

Artikel-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Sinnlose PHP-Scripte Sebbl Sonstiges 9 09.08.2007 06:14
sinnlose scrollbar unten? babyboy-1991 HTML 3 06.08.2005 23:10
if-konstrukte mit regexp parsen swelpot PHP 4 03.10.2004 17:43
mehrere "sinnlose" fehlermeldungen conym18 PHP 2 26.07.2004 15:58


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:11 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC