Zitat von
Matze:
@Julius: Du solltest noch
mysqlrealescapestring() o.ä. nutzen. Es kann sonst ganz böse ausgehen, wenn der Benutzername im Session-Array ein Hochkomma enthält. Wenn ich das richtig sehe sind so problemlos
SQL-Injections möglich.
Wenn du die Strings vorm Zuweisen des Session-Aeeays escapest, dann ist das natürlich in Ordnung. Doch das ist nicht ersichtlich. Daher der Hinweis.
Wetten der Server hatten magic_quotes aktiviert?
Ist das der Fall, so würde ein (weiteres) esacpen nämlich die Daten zerstören.
Edit:// ...
... Warum hab' ich in letzter Zeit immer so'n Pech mit solchen Kommentaren? Und warum haben in letzter Zeit immer mehr Server die magic_quotes deaktiviert? Noch sind die nämlich standard-mäßig bei PHP aktiviert.
Naja, trag' ich eben was anderes sinnvolles zum Thema bei. *g* Das ganze Problem wäre keins (oder ein geringeres), wenn ihr Code von Ausgabe trennen würdet. Dafür bietet sich zum Beispiel ein Template-System wie
Smarty an. Außerdem bietet sich für die Programmierung von Webseiten mit PHP auch die Verwendung der
MVC-Architektur an. Tut man dies und ruft ein Benutzer eine Seite auf, so wird für den Content eine Methode einer Klasse aufgerufen. Zum Beispiel so eine:
Code:
<?php
class MyController extends Controller {
public function myAction()
{
// Hier Code einfügen
}
}
An dieser Stelle wäre es ein leichtes, ein geeignetes Sicherheits-System zu implementieren. Dabei kommt es darauf an, wie komplex dieses sein soll. Wir benutzen eine Art RBAC-System, welches mit Rollen arbeitet. Möchten wir den Zugriff auf eine Ressource prüfen, so läuft das wie folgt:
Code:
// Dieser Code steht in der obigen Methode
if (!$this->has_role('view memberlist'))
return 403;
Mittels des return-Codes kann so auf ganz einfache Art und Weise sogar der HTTP-Status festgelegt werden. Wenn man alles drumherum entsprechend gestaltet, so wäre es dann möglich durch diese einfachen Zeilen einen 403-Error auszugeben, was zugleich auch noch SEO-konform ist. Ähnliches kann man mit 404 bewerkstelligen:
Code:
try {
$user = new User(strval($_GET['user']));
} except (UserNotFoundException) {
return 404;
}
Die HTTP-Status-Codes für "Bad Request" und "Internal Server Error" haben ähnlichen Anreiz diese Funktion zu verwenden.
Mit freundlichen Grüßen,
Valle