Ist diese Variable sicher???
Kodi
- php
Hallo,
ich habe fogenden code in meiner Seite am Anfang meiner Dateien, um
eine Seite zu includen die überprüft ob man eingeloggt ist oder nicht.
Je nachdem in welchem Ordner eine zu Überprüfende Seite sich befindet,
passe ich die Variable $verzeichniss dementsprächend an.
$verzeichniss = "..";
include("$verzeichniss"."includes/check.php");
Ist die Variable $verzeichniss eine Sicherheitslücke?
(Remote File Inclusion)- Oder dergleichen?
Gruss
Kodi
echo $begrüßung;
$verzeichniss = "..";
include("$verzeichniss"."includes/check.php");Ist die Variable $verzeichniss eine Sicherheitslücke?
(Remote File Inclusion)- Oder dergleichen?
Nur dann, wenn es jemandem gelingt, ihren Wert so zu ändern, wie du es nicht wünschst. Ob das möglich ist, lässt sich ohne den Rest nicht sagen.
Du kannst für solche konstanten Werte Konstanten verwedest. Diesen lässt sich nur durch Quelltextänderung ein anderer Wert zuweisen. Natürlich muss dann auch ausgeschlossen sein, dass fremder Quelltext ausgeführt werden kann. Aber der wäre dann auf diese Konstante auch nicht mehr angewiesen, weil er ja beliebigen Code direkt enthalten kann.
echo "$verabschiedung $name";
$verzeichnis = "..";
include("$verzeichnis"."includes/check.php");
Der obige Code befindet sich ganz am Anfang der Seite.
Ich versteht das immer noch nicht.
Ist die Variable $verzeichnis nun irgendwie unsicher und entsteht
somit eine Sicherheitslücke?
Muss ich aus der $verzeichnis Variablen eine Kontante machen?
define('VERZEICHNIS', '..');
include("VERZEICHNIS"."includes/check.php");
Kodi
HI, Kodi
"Unsicher" sollte aus meiner Sicht deine Variable $verzeichnis nicht sein da Du ihr ja einen Wert zuweist.
Wenn Du auf Nummer "Sicher" Gehen möchtest dann benutze Kontante
Du definierst am Angfang Deiner *.php Datei per
define('PASSWORT', 'E134312bgwdflw');
Die Include Datei sollte das PASSWORT kennen.
if (!defined('PASSWORT') )
{
die("EXIT");
}
Der Trick dabei ist das eine Kontante wenn einmal gesetzt nicht mehr überschrieben werden kann.
Wenn ich Deiner Seite eine $_GET Variable alla ?PASSWORT=jhsdjsad übergeben
ist dieser Angriff nicht möglich.
RW
define('PASSWORT', 'E134312bgwdflw');
Die Include Datei sollte das PASSWORT kennen.
if (!defined('PASSWORT') )
{
die("EXIT");
}
Danke.
Nun noch eine Sache.
Muss ich alle Get Variablen die ich an eine andere Seite übergebe,
überprüfen.
Also muss ich nur bestimmte Werte einer GET Variablen zulassen oder
ist der Inhalt der Get Variable kein Sicherheitsrisiko?
Gruss
Kodi
Hallo,
Nun noch eine Sache.
Muss ich alle Get Variablen die ich an eine andere Seite übergebe,
überprüfen.Also muss ich nur bestimmte Werte einer GET Variablen zulassen oder
ist der Inhalt der Get Variable kein Sicherheitsrisiko?
Das kommt darauf an, was Du damit anstellst.
Wenn Du sie z.B. nur kontextgerecht ausgibst, dann kann damit wenig passieren, außer dass natürlich Blödsinn angezeigt oder gespeichert werden kann.
Wenn Du aber den Kontext (also, ob es in die Datenbank oder zum Client zurück oder sonstwohin geht) nicht beachtest und das passende Escaping/Codierung versäumst, dann kann Deine Datenbank geschreddert werden, jemand 100.000 Mails auf Deine Kosten verschicken, usw.
LG
Chris©
HI,
Kodi
Das sollte Deine Entscheidung sein!
Alles was als $_SERVER['REQUEST_METHOD'] kommt ( POST oder GET ) würde ich auf Muster prüfen.
RW
echo $begrüßung;
$verzeichnis = "..";
include("$verzeichnis"."includes/check.php");Der obige Code befindet sich ganz am Anfang der Seite.
Ist die Variable $verzeichnis nun irgendwie unsicher und entsteht somit eine Sicherheitslücke?
Wenn du nur diese beiden Zeilen betrachtest, ist da keine Lücke zu erkennen. Lücken entstehen typischerweise, wenn man vergessen hat, einer Variablen einen Wert zuzuweisen, oder diese Zuweisung nur bedingt erfolgt (im if-Zweig, aber im else vergessen, oder umgekehrt), und man dann auf diese Variable lesend zugreift. Normalerweise erzeugt PHP bei einem lesenden Zugriff auf eine nicht existente Variable eine Notice-Meldung (error_reporting zum Entwickeln auf E_ALL stellen, display_errors auf on) und gibt null als Wert zurück. Soweit kein Problem, das null wird je nach Umfeld in einen Leerstring oder nach 0 umgewandelt. Das Problem entsteht erst dann, wenn es jemandem gelingt, diese Variable vorher zu erzeugen und ihr einen Wert zuzuweisen. Das kann mit dem Feature register_globals erfolgen oder auch von eigenen Programmteilen, die den gleichen Variablennamen verwenden. Es ist deshalb aus nicht nur aus Sicherheitsgründen ratsam, auf eine explizite Variableninitialisierung nicht zu verzichten.
Muss ich aus der $verzeichnis Variablen eine Kontante machen?
Muss nicht, aber wenn dieser Wert nicht veränderlich ist, braucht man keinen Container für veränderliche Werte (sprich: eine Variable), sondern kann diesen konstanten Wert auch in der dafür vorgesehenen Weise verwenden.
define('VERZEICHNIS', '..');
include("VERZEICHNIS"."includes/check.php");
Zeichenketten werden mit "" (oder '') eingerahmt. Variablennamen und Konstantennamen stehen einfach so da. Nur bei Variablennamen, die in ""-Strings notiert werden, erkennt PHP diese als Variablen. Alle anderen Zeichen werden so interpretiert, wie sie dort stehen.
echo "$verabschiedung $name";
HI, Kodi
Ein einfacher Schutz ist z.B.
define('ICH_DARF_INLCUDES', true);
und in der include
if (!defined('ICH_DARF_INLCUDES') )
{
die("Angriff");
}
RW
Hi,
Ist die Variable $verzeichniss eine Sicherheitslücke?
nein, aber eine Gesundheitslücke - sie bereitet mir Kopfschmerzen. Bitte schreibe "Verzeichnis" nur mit den zwingend erforderlichen Buchstaben.
Cheatah