Ist dieses Script sicher?...
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
Ist dieses Script sicher?...
Hi,
ich wollte ein Script nehmen um einen bestimmten Text z.B. per passwort zu schützen, dazu habe ich dieses Script gefunden: .:Link:. so, nur jetzt würde ich gerne wissen ob dieses script sicher ist und das nicht aufeinmal eine lücke ist wodurch alle zugriff auf diese datei haben...
ich wollte ein Script nehmen um einen bestimmten Text z.B. per passwort zu schützen, dazu habe ich dieses Script gefunden: .:Link:. so, nur jetzt würde ich gerne wissen ob dieses script sicher ist und das nicht aufeinmal eine lücke ist wodurch alle zugriff auf diese datei haben...
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Du solltest die Kennwörter nicht im Klartext speichern, sondern mit md5(); wandeln und das übernommene Passwort ebenfalls mit md5(); wandeln, bevor beide verglichen werden.
Ansonsten gibt es an dem Script nichts auszusetzen.
Ansonsten gibt es an dem Script nichts auszusetzen.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
achso, danke für den tipp, habe mich nur gewundert woher das 2te script (das ausgabe) weiß das das wirklich ein valider user ist 
mhmm, ich bin da jetzt nicht so ein prof, was muss ich an dem script ändern damit das mit md5 verschlüsselt und dann verglichen wird ?
mein versuch war:
if($pruef[0] == $_POST['md5(user)'] && $pruef[1] == $_POST['md5(pass)'])
aber das gingn nicht, habe natülich passwort in md5 verwandelt gehabt
EDIT2: so ich habe es hinbekommen, und war so:
if($pruef[0] == md5($_POST['user']) && $pruef[1] == md5($_POST['pass']))
EDIT3. Könnte ich damit auch Dateien (Bilder, etc.) per passwort schlüsseln ?
EDIT4: ja, geht indem ich die dateien in ein verzeichnis mit deny, allow tue und in der geschützten php datei include
mhmm, ich bin da jetzt nicht so ein prof, was muss ich an dem script ändern damit das mit md5 verschlüsselt und dann verglichen wird ?
mein versuch war:
if($pruef[0] == $_POST['md5(user)'] && $pruef[1] == $_POST['md5(pass)'])
aber das gingn nicht, habe natülich passwort in md5 verwandelt gehabt
EDIT2: so ich habe es hinbekommen, und war so:
if($pruef[0] == md5($_POST['user']) && $pruef[1] == md5($_POST['pass']))
EDIT3. Könnte ich damit auch Dateien (Bilder, etc.) per passwort schlüsseln ?
EDIT4: ja, geht indem ich die dateien in ein verzeichnis mit deny, allow tue und in der geschützten php datei include
Zuletzt geändert von KeineAhnung am Di 25.Sep, 2007 22:56, insgesamt 5-mal geändert.
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
ja cih weis dopplepost, aber oben habe ich ja geschrieben ich habe alles geschafft und jetzt doch irgendwie nicht:
ich möchste mit diesem Script Dateien includieren (also das nur authorisierte user zugriff haben):
so und jetzt möchte ich wissen ob das script sicher ist, denn man includiert ja über die variable, ob man dann ncith bösen code includieren kann...
ich möchste mit diesem Script Dateien includieren (also das nur authorisierte user zugriff haben):
Code: Alles auswählen
<?php
session_start();
if($_SESSION['user'] != "")
{
header("Content-Type: application/x-msdownload");
// *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
?>
<?php
$muh = $_GET["Vorname"];
htmlspecialchars($muh);
include("gesichert/$muh");
?>
<?php
// *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
}
else
{
echo "Kein Zugriff!";
}
?>
Zuletzt geändert von KeineAhnung am Di 25.Sep, 2007 23:31, insgesamt 2-mal geändert.
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Wenn Du in der Bedingung eine Konstante definierst, die nur dann gesetzt ist, wenn die Anmeldung erfolgreich war, also z. B.
dann kannst Du in der includierten Datei dieses mit abfragen:
Dann kann keiner das includierte File aufrufen, ohne sich angemeldet zu haben.
Was allerdings includiert wird, kann man nicht prüfen/steuern, wenn die Datei nicht im eigenen Zugriff steht und nur von Dir geändert werden kann.
Für diesen Fall muss man die üblichen Prüfungen für alle SQL-Abfragen machen, also z. B.
für nummerische Werte (Variablenname natürlich anpassen) oder
für Strings (Auch hier den Variablennamen wieder anpassen).
Code: Alles auswählen
header("Content-Type: application/x-msdownload");
define('LOGGED_IN', true);Code: Alles auswählen
if(defined('LOGGED_IN'))
{
weiter im script
}
else
{
Fehlermeldung
}Was allerdings includiert wird, kann man nicht prüfen/steuern, wenn die Datei nicht im eigenen Zugriff steht und nur von Dir geändert werden kann.
Für diesen Fall muss man die üblichen Prüfungen für alle SQL-Abfragen machen, also z. B.
Code: Alles auswählen
$num_var = intval($num_var);Code: Alles auswählen
$str_var = htmlspecialchars(str_replace("\'", "''", $str_var));Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
ich mahcs doch lieber auf die sichere art 
Code: Alles auswählen
<?php
session_start();
if($_SESSION['user'] != "")
{
if($_GET['datei1'] != "")
{
header("Content-Type: image/gif");
include ("gesichert/load.gif");
}
else
{
echo "Keine Datei gewählt!";
}
}
else
{
$datei = htmlspecialchars($_GET["datei1"]);
echo "Um sich die Datei <b>$datei</b> anzuschauen musst du eingeloggt sein.";
require "login.php";
}
?>
Zuletzt geändert von KeineAhnung am Mi 26.Sep, 2007 15:46, insgesamt 1-mal geändert.
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
nur die habe ich nicht ganz verstanden
könntest du das was ich gepostet habe denn so anpassen wie du gemeint hast ?
EDIT:wäre das denn so trotz GET sicher ?
EDIT:wäre das denn so trotz GET sicher ?
Code: Alles auswählen
<?php
session_start();
if($_SESSION['user'] != "")
{
header("Content-Type: image/gif");
$str_var = htmlspecialchars(str_replace("\'", "''", $_GET['datei']));
include ("gesichert/$str_var");
}
else
{
$datei = htmlspecialchars($_GET["datei1"]);
echo "Um sich die Datei <b>$datei</b> anzuschauen musst du eingeloggt sein.";
require "login.php";
}
?>
Zuletzt geändert von KeineAhnung am Mi 26.Sep, 2007 18:21, insgesamt 1-mal geändert.
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
naja ich konnt jetzt zwar die .htaccess auch includieren und zum download anbeiten, aber stört mich nicht wenn die sehen das da steht order deny,allow deny from all allow from 127.0.0.1
oder kann das schlimme folgen mit sich tragen ?
oder kann das schlimme folgen mit sich tragen ?
Zuletzt geändert von KeineAhnung am Mi 26.Sep, 2007 20:47, insgesamt 1-mal geändert.
Dein Script oben. Wenn Du register_globals auf Deinem Server auf ON hast, kann man theoretisch die Session Variable USER überschreiben. Du hast hier ja bei der Session keinen erneuten Passwortcheck mehr. Deine einzige Prüfung ist nämlich ob die Variable leer ist oder nicht. Bei Globals ON könntest Du unter Umständen diese Var setten und wärst damit autentifiziert.
Umgehen kannste das wenn Du vor session_start(); noch
$_SESSION = array();
oder unset($_SESSION);
machst.
Sicher is sicher.
Alternativ das Passwort (verschlüsselt!) auch in die Session Var ablegen und bei jeder Seitenegenerierung nochmal prüfen ob das PW in Ordnung ist. Nur isses halt dumm, dass es dann auch in ner Session auftaucht, aber geht noch.
Bei Globals OFF hast Du natürlich absolut keine Probleme, da kommt keiner mehr von außen an die Session Vars ran.
Noch was gravierendes:
Dein Datei Include ist unsicher. Du sicherst nicht gegen Verzeichnisjumps ab (../). So kann man einfach mit ../ von geheim wieder nen Ordner zurück und includen was man möchte. Du sendest zwar den GIF Header, aber solche Dinge kann man mit entsprechenden Tools auch ignorieren oder umschreiben und so unter Umständen andere Dinge includen.
EDIT:
Beim else müsstest auch $_GET['datei'] schreiben statt $_GET['datei1'], sonst ist die Ausgabe natürlich leer in dem Fall.
Umgehen kannste das wenn Du vor session_start(); noch
$_SESSION = array();
oder unset($_SESSION);
machst.
Sicher is sicher.
Alternativ das Passwort (verschlüsselt!) auch in die Session Var ablegen und bei jeder Seitenegenerierung nochmal prüfen ob das PW in Ordnung ist. Nur isses halt dumm, dass es dann auch in ner Session auftaucht, aber geht noch.
Bei Globals OFF hast Du natürlich absolut keine Probleme, da kommt keiner mehr von außen an die Session Vars ran.
Noch was gravierendes:
Dein Datei Include ist unsicher. Du sicherst nicht gegen Verzeichnisjumps ab (../). So kann man einfach mit ../ von geheim wieder nen Ordner zurück und includen was man möchte. Du sendest zwar den GIF Header, aber solche Dinge kann man mit entsprechenden Tools auch ignorieren oder umschreiben und so unter Umständen andere Dinge includen.
EDIT:
Beim else müsstest auch $_GET['datei'] schreiben statt $_GET['datei1'], sonst ist die Ausgabe natürlich leer in dem Fall.
Zuletzt geändert von cback am Mi 26.Sep, 2007 22:34, insgesamt 5-mal geändert.
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Wenn man bereits Scripte downloaden kann, kann man enthaltene Sicherheitslücken noch einfacher ausnutzen.
Also sicher ist dann nur der sichere Hack Deines Servers
Also sicher ist dann nur der sichere Hack Deines Servers
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
-
cYbercOsmOnauT
- Beiträge: 10
- Registriert: Mo 29.Mai, 2006 03:21
Code: Alles auswählen
<?php
// Sicherheit gegen register_globals Attacken
$_SESSION = array();
// Sicherheit gegen Directory Traversal und ASCIIZ Attacken
$datei = htmlspecialchars(preg_replace('#(\/|\.\.|"|\'|\x00)#i', '',$_GET['datei']));
$datei = str_replace('%00', '', $datei);
session_start();
if($_SESSION['user'] != "")
{
header("Content-Type: image/gif");
include ("gesichert/$datei");
}
else
{
echo "Um sich die Datei <b>$datei</b> anzuschauen musst du eingeloggt sein.";
require "login.php";
}
?>? Supporter bei phpBB.de ?
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
[quote="cYbercOsmOnauT";p="77149"]
Noch Fragen?
[/quote]
ja
ist das jetzt unknackbar (also mit verzeichniswechsel ^^)
danke schonmal
Code: Alles auswählen
<?php
// Sicherheit gegen register_globals Attacken
$_SESSION = array();
// Sicherheit gegen Directory Traversal und ASCIIZ Attacken
$datei = htmlspecialchars(preg_replace('#(\/|\.\.|"|\'|\x00)#i', '',$_GET['datei']));
$datei = str_replace('%00', '', $datei);
session_start();
if($_SESSION['user'] != "")
{
header("Content-Type: image/gif");
include ("gesichert/$datei");
}
else
{
echo "Um sich die Datei <b>$datei</b> anzuschauen musst du eingeloggt sein.";
require "login.php";
}
?>ja
danke schonmal
-
cYbercOsmOnauT
- Beiträge: 10
- Registriert: Mo 29.Mai, 2006 03:21
Das i nach der # kann weg. Das schreib ich standardmäßig immer in meine RegEx's, aber hier in diesem Fall ist es nicht nötig. Verzeichniswechsel werden abgefangen.
? Supporter bei phpBB.de ?
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
[quote="cYbercOsmOnauT";p="77149"]
Noch Fragen?
[/quote]
noch mal eine frage zu diesem script, wie schaffe ich es wenn die zu includierende datei nicht existiert das anstatt
"
einfach nru kommt "Datei existiert nicht" ?
Code: Alles auswählen
<?php
// Sicherheit gegen register_globals Attacken
$_SESSION = array();
// Sicherheit gegen Directory Traversal und ASCIIZ Attacken
$datei = htmlspecialchars(preg_replace('#(\/|\.\.|"|\'|\x00)#i', '',$_GET['datei']));
$datei = str_replace('%00', '', $datei);
session_start();
if($_SESSION['user'] != "")
{
header("Content-Type: image/gif");
include ("gesichert/$datei");
}
else
{
echo "Um sich die Datei <b>$datei</b> anzuschauen musst du eingeloggt sein.";
require "login.php";
}
?>noch mal eine frage zu diesem script, wie schaffe ich es wenn die zu includierende datei nicht existiert das anstatt
Code: Alles auswählen
Warning: include(gesichert/beispiel) [function.include]: failed to open stream: No such file or directory in XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX on line 17
Warning: include() [function.include]: Failed opening 'gesichert/beispiel' for inclusion (include_path='.;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') in XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX on line 17einfach nru kommt "Datei existiert nicht" ?
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Man kann das prüfen, also in dem Falle wäre ein
Jedoch wäre auch ein require(); hier noch am besten geeignet, da die Datei ja verwendet werden muss.
Zwar ist hier auch die Fehlermeldung eine PHP-eigene und nur mir weiteren Tricks änderbar (analog der phpBB3-Mimik), aber es würde dann auf jeden Fall auch die weitere Verarbeitung komplett anhalten, was hier ja dann auch geschehen sollte.
Code: Alles auswählen
if(@file_exists($phpbb_root_path.'gesichert/beispiel'))
{
// normal weiter im Script;
}
else
{
message_die(GENERAL_MESSAGE, 'Datei existiert nicht');
}Zwar ist hier auch die Fehlermeldung eine PHP-eigene und nur mir weiteren Tricks änderbar (analog der phpBB3-Mimik), aber es würde dann auf jeden Fall auch die weitere Verarbeitung komplett anhalten, was hier ja dann auch geschehen sollte.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
[quote="oxpus";p="77485"]Man kann das prüfen, also in dem Falle wäre ein
Jedoch wäre auch ein require(); hier noch am besten geeignet, da die Datei ja verwendet werden muss.
Zwar ist hier auch die Fehlermeldung eine PHP-eigene und nur mir weiteren Tricks änderbar (analog der phpBB3-Mimik), aber es würde dann auf jeden Fall auch die weitere Verarbeitung komplett anhalten, was hier ja dann auch geschehen sollte.[/quote]
das mit require ist mir als anfänger zu schwer aber das da oben geht, super, danke, und die bücher die du mir mal in dem anderen thread empfohlen hast (php + mysql und das andere) werde ich mir auf jedne fall holen
und wie schaffe ich es jetzt noch das wenn die datei z.b bla.zip heißt das der automatisch dne mime typ weiß, also das der die datei endung rausfindet und ich dann in die datei eintrage bei welcher datei endung der was machen soll...
EDIT: schon erledigt, war garnciht so schwer
Code: Alles auswählen
if(@file_exists($phpbb_root_path.'gesichert/beispiel'))
{
// normal weiter im Script;
}
else
{
message_die(GENERAL_MESSAGE, 'Datei existiert nicht');
}Zwar ist hier auch die Fehlermeldung eine PHP-eigene und nur mir weiteren Tricks änderbar (analog der phpBB3-Mimik), aber es würde dann auf jeden Fall auch die weitere Verarbeitung komplett anhalten, was hier ja dann auch geschehen sollte.[/quote]
das mit require ist mir als anfänger zu schwer aber das da oben geht, super, danke, und die bücher die du mir mal in dem anderen thread empfohlen hast (php + mysql und das andere) werde ich mir auf jedne fall holen
und wie schaffe ich es jetzt noch das wenn die datei z.b bla.zip heißt das der automatisch dne mime typ weiß, also das der die datei endung rausfindet und ich dann in die datei eintrage bei welcher datei endung der was machen soll...
EDIT: schon erledigt, war garnciht so schwer
Zuletzt geändert von KeineAhnung am So 14.Okt, 2007 17:23, insgesamt 2-mal geändert.
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Wie ausschliessen?
Was willst Du denn einbinden, bzw. unterdrücken?
Ich kann dem Sinn des Ganzen nicht so recht folgen...
Was willst Du denn einbinden, bzw. unterdrücken?
Ich kann dem Sinn des Ganzen nicht so recht folgen...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
- KeineAhnung
- Beiträge: 349
- Registriert: Di 29.Mai, 2007 17:35
- Wohnort: NRW
- Kontaktdaten:
einfach nur wie ich schaffe das der das verzeichnis ausliest, alle dateien halt iwie ausgibt als link, und den dateinamen jeder datei z.B. in $name speichert so das ich dann einstellen kann das wenn man auf die datei klcikt dasm an auf dload.php?download=$name kommt
EDIT3: alle probleme sleber gelöst
EDIT2: (der neuste edit:D) ok nun habe ich folgendes problem, die dateinamen werden in der variabel "$files[0]" [1] etc, also einzeln gespeichert, und dieanzahl in $count, wie schaffe ich das der nur die $files[0]- z.B[12] öffnet wenn $count 12 ist ?
EDIT: habe schon mit google was nützliches gefunden
http://www.phpforum.de/forum/showthread.php?t=160977
EDIT3: alle probleme sleber gelöst
EDIT2: (der neuste edit:D) ok nun habe ich folgendes problem, die dateinamen werden in der variabel "$files[0]" [1] etc, also einzeln gespeichert, und dieanzahl in $count, wie schaffe ich das der nur die $files[0]- z.B[12] öffnet wenn $count 12 ist ?
EDIT: habe schon mit google was nützliches gefunden
http://www.phpforum.de/forum/showthread.php?t=160977
Zuletzt geändert von KeineAhnung am Mo 15.Okt, 2007 21:18, insgesamt 4-mal geändert.