php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 02-04-2008, 00:18
23isall
 Newbie
Links : Onlinestatus : 23isall ist offline
Registriert seit: Apr 2008
Ort: siegen
Beiträge: 60
23isall ist zur Zeit noch ein unbeschriebenes Blatt
23isall eine Nachricht über ICQ schicken
Question Loginscript funktioniert nicht richtig

Hallo zusammen,

Folgendes passiert wenn mehr wie ein gültiges Passwort in der check_access.txt vorhanden ist, dann wird das neuste Passwort nicht akzeptiert, was mache ich falsch?
Des weiteren würde ich gern auch in dem Script den Befehl dazu geben, die abgelaufenen Passwörter zu löschen.

login.php
PHP-Code:
<?php
$handle 
fopen ("check_access.txt""r");
$time time();
$t_access 2*60*60// nach zwei stunden verfällt das passwort
while ( $inhalt fgets ($handle4096 ))
{
    
$inhalt trim $inhalt );

    if ( 
trim ($inhalt) > $time-$t_access)
    {
        
ini_set("session.use_cookies""0");
        if (
$_POST["user"]=="benutzer" && $_POST["passwd"]=="$inhalt") {
            
session_name('sid');
            
session_start();
            
$_SESSION["user"]=$_POST["user"];
            
$_SESSION["VERIFIED"]=true;
            
$_SESSION["REMOTE_ADDR"] = $_SERVER["REMOTE_ADDR"];
            
Header('Location: /data.php?sid='.session_id());
        } else {
            
Header('Location: /index.php?access=denied');
        }
        exit;
    }
}
fclose($handle);
Header('Location: /index.php?access=denied');
?>
check_access.txt
PHP-Code:
1207037480
1207045736
1207046105
1207048792
1207056376 
Ich hoffe, dass mir da jemand weiter helfen kann, denn ich such schon ne ganze Weile nach einer Lösung.

Danke schon mal für eure Hilfe und Unterstützung...

Geändert von 23isall (02-04-2008 um 04:46 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 02-04-2008, 03:21
23isall
 Newbie
Links : Onlinestatus : 23isall ist offline
Registriert seit: Apr 2008
Ort: siegen
Beiträge: 60
23isall ist zur Zeit noch ein unbeschriebenes Blatt
23isall eine Nachricht über ICQ schicken
Question

Ich habe den Code überarbeitet, aber immer noch keine Lösung gefunden:

PHP-Code:
<?php
$handle 
fopen('check_access.txt''r');
$time time()-2*60*60;
while (!
feof($handle))
{
    
$content fgets($handle11);
    
$content trim($content);
    if (
$content $time)
    {
        if (isset(
$_POST['user']) && $_POST['user'] == 'benutzer' && (isset($_POST['passwd']) && $_POST['passwd'] == "$content"))
        {
            
ini_set('session.use_cookies''0');
            
session_name('sid');
            
session_start();
            
$_SESSION['user'] = isset($_POST['user']);
            
$_SESSION['VERIFIED'] = true;
            
$_SESSION['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'];
            
Header('Location: /data.php?sid='.session_id());
        }
        else
        {
            
Header('Location: /index.php?access=denied');
        }
        exit;
    }
}
fclose($handle);
Header('Location: /index.php?access=denied');
?>
Ich vermute, dass der Fehler an der If-Bedingung: "if ($content > $time)" liegt.
Es kommt mir so vor, als würde das Script beim ersten Ergebnis eines gültigen Passwortes alle weiteren Passwörter die ebenfalls Gültig sind ignorieren.
Die abgelaufenen Passwörter werden Korrekt erkannt.
Kann mir da jemand einen Gedankenstoß geben?

Geändert von 23isall (02-04-2008 um 07:03 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 02-04-2008, 09:17
MelloPie
 PHP Master
Links : Onlinestatus : MelloPie ist offline
Registriert seit: Jan 2002
Ort: Hessen
Beiträge: 4.380
MelloPie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Es kommt mir so vor, als würde das Script beim ersten Ergebnis eines gültigen Passwortes alle weiteren Passwörter die ebenfalls Gültig sind ignorieren.
Nachdem das erste mal Deine Bedingung erfüllt ist, wird in deinem Code weitergeleitet. Warum willst Du weitere gültige Passwörter checken?
Code:
Header('Location: /data.php?sid='.session_id());
noch 2 Fragen:
- warum speicherst Du Passworte in einer txt datei, die man im Klartext auslesen könnte?
- heissen alle Deine user "benutzer"?
__________________
Beantworte nie Threads mit mehr als 15 followups...
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25
Mit Zitat antworten
  #4 (permalink)  
Alt 02-04-2008, 09:19
MelloPie
 PHP Master
Links : Onlinestatus : MelloPie ist offline
Registriert seit: Jan 2002
Ort: Hessen
Beiträge: 4.380
MelloPie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

btw. immer wenn das erste mal ein Wert grösser als dein $time ist wird weitergeleitet
__________________
Beantworte nie Threads mit mehr als 15 followups...
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25
Mit Zitat antworten
  #5 (permalink)  
Alt 02-04-2008, 10:18
23isall
 Newbie
Links : Onlinestatus : 23isall ist offline
Registriert seit: Apr 2008
Ort: siegen
Beiträge: 60
23isall ist zur Zeit noch ein unbeschriebenes Blatt
23isall eine Nachricht über ICQ schicken
Standard

Hallo MelloPie,

Zitat:
Warum willst Du weitere gültige Passwörter checken?
Weil man ein Passwort anfordern kann, was dann in der check_access.txt abgelegt wird.
Ist es denn möglich, auch das zweite Passwort usw. zu akzeptieren und nicht die anderen, die gültig sind zu ignorieren?


Zitat:
heissen alle Deine user "benutzer"?
Erst mal ja.

Zitat:
warum speicherst Du Passworte in einer txt datei?
Weil sie auserhalb des webroots im Ordner files liegt sowie die login.php.
Mit Zitat antworten
  #6 (permalink)  
Alt 02-04-2008, 11:31
MelloPie
 PHP Master
Links : Onlinestatus : MelloPie ist offline
Registriert seit: Jan 2002
Ort: Hessen
Beiträge: 4.380
MelloPie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich halte das zwar für ziemlich umständlich aber is Dein Ding. Denn Du hast damit eigentlich ein Sicherheitsproblem.

Aber gut, mach folgendes:
Du gehst immer alle Zeilen Deiner Datei durch und nur wenn ein Passwort stimmt, dann leitest Du weiter auf die
Header('Location: /data.php?sid='.session_id());

Nach deiner Schleife leitest Du weiter auf
Header('Location: /index.php?access=denied');

Das bedeutet zwar dass der NUtzer nur irgendein gueltiges Passwort eingegben muss, aber das scheint ja genau das zu sein was Du möchtest, allerdings würde ich je nach Sicherheitsverlangen das Loginsystem personalisieren und sicherer gestalten.
__________________
Beantworte nie Threads mit mehr als 15 followups...
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25
Mit Zitat antworten
  #7 (permalink)  
Alt 02-04-2008, 13:25
MelloPie
 PHP Master
Links : Onlinestatus : MelloPie ist offline
Registriert seit: Jan 2002
Ort: Hessen
Beiträge: 4.380
MelloPie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@23isall POste Deine Fragen hier und schicke bitte keine Mails.

Dein Script macht folgendes:

beim ersten Satz bei dem die Bedingung if ($content > $time) wahr ist wird weitergeleitet. Das heisst im Klartext, das erste gueltige Passwort wird verglichen, kein weiteres.

Deswegen leite erst nach der while (!feof($handle)) schleife weiter auf Header('Location: /index.php?access=denied');
__________________
Beantworte nie Threads mit mehr als 15 followups...
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25
Mit Zitat antworten
  #8 (permalink)  
Alt 02-04-2008, 13:47
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Setze ein Kontrollvariable statt direkt weiterzuleiten und prüfe diese am Ende des Scripts
PHP-Code:
<?php
$handle 
'check_access.txt';
$time time()-2*60*60;
$bool false;
foreach (
file($handle) as $wert)
{
    if (
$wert $time){
        if (isset(
$_POST['user']) && $_POST['user'] == 'benutzer' && (isset($_POST['passwd']) && $_POST['passwd'] == $wert)){
            
$bool true;
        }else{
            
$bool false;
        }
    }
}
if(
$bool === false){
  
Header('Location: /index.php?access=denied');
}else{
  
ini_set('session.use_cookies''0');
  
session_name('sid');
  
session_start();
  
$_SESSION['user'] = isset($_POST['user']);
  
$_SESSION['VERIFIED'] = true;
  
$_SESSION['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'];
  
Header('Location: /data.php?sid='.session_id());
}
?>
Gruss

tobi
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #9 (permalink)  
Alt 02-04-2008, 18:53
23isall
 Newbie
Links : Onlinestatus : 23isall ist offline
Registriert seit: Apr 2008
Ort: siegen
Beiträge: 60
23isall ist zur Zeit noch ein unbeschriebenes Blatt
23isall eine Nachricht über ICQ schicken
Standard

@MelloPie,

Sorry für die Mail, aber ich war mir nicht sicher, ob ich oder du mich richtig verstanden hast. Wird nicht wieder vorkommen.

Gruß Micha ;-)


@jahlives,

Ich habe das Script getestet, leider funktioniert es immer noch nicht richtig.
Wenn ich aber trim() nutze, wird wenigstes das letzte gültige Passwort erkannt und korrekt weitergeleitet.

PHP-Code:
<?php
$handle 
'check_access.txt';
$time time()-2*60*60;
$bool false;
foreach (
file($handle) as $wert)
{
    
$wert trim($wert);
    if (
$wert $time) {
        if (isset(
$_POST['user']) && $_POST['user'] == 'benutzer' && (isset($_POST['passwd']) && $_POST['passwd'] == $wert)) {
            
$bool true;
        }
        else {
            
$bool false;
        }
    }
}
if(
$bool === false) {
    
Header('Location: /index.php?access=denied');
}
else {
    
ini_set('session.use_cookies''0');
    
session_name('sid');
    
session_start();
    
$_SESSION['user'] = isset($_POST['user']);
    
$_SESSION['VERIFIED'] = true;
    
$_SESSION['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'];
    
Header('Location: /data.php?sid='.session_id());
}
?>
Mit Zitat antworten
  #10 (permalink)  
Alt 02-04-2008, 22:00
23isall
 Newbie
Links : Onlinestatus : 23isall ist offline
Registriert seit: Apr 2008
Ort: siegen
Beiträge: 60
23isall ist zur Zeit noch ein unbeschriebenes Blatt
23isall eine Nachricht über ICQ schicken
Standard

Ich hab es mal mit error_reporting(E_ALL); versucht, es werden keine Fehler angezeigt, des weiteren wollte ich wissen, was die Variable $bool ausspuckt.
Ist das letzte Passwort gültig, steht in der Variable $bool der Wert: 1
Wird das vorletzte Passwort eingegeben, was auch Gültig ist, steht in der Variable $bool kein Wert und es wird zu Header('Location: /index.php?access=denied'); weitergeleitet.
Dies passiert auch bei Passwörtern die nicht mehr Gültig sind, dass ist ja so Korrekt.

PHP-Code:
<?php
error_reporting
(E_ALL);
$handle 'check_access.txt';
$time time()-2*60*60;
$bool FALSE;
foreach (
file($handle) as $wert)
{
    
$wert trim($wert);
    if (
$wert $time && isset($_POST['user']) && $_POST['user'] == 'benutzer' && (isset($_POST['passwd']) && $_POST['passwd'] == $wert)) {
            
$bool TRUE;
        }
        else {
            
$bool FALSE;
        }
    }
if(
$bool === FALSE) {
//    Header('Location: /index.php?access=denied');
echo $bool;
}
else {
    
ini_set('session.use_cookies''0');
    
session_name('sid');
    
session_start();
    
$_SESSION['user'] = isset($_POST['user']);
    
$_SESSION['VERIFIED'] = TRUE;
    
$_SESSION['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'];
//    Header('Location: /data.php?sid='.session_id());
echo $bool;
}
?>

Geändert von 23isall (02-04-2008 um 22:25 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 03-04-2008, 10:12
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Ist das letzte Passwort gültig, steht in der Variable $bool der Wert: 1
Wird das vorletzte Passwort eingegeben, was auch Gültig ist, steht in der Variable $bool kein Wert
Dann ist dein PHP kapputt Weil die Werte weder 1 noch nichts sind. Sondern true oder false. Wenn man Variablen prüfen will bietet sich eine Funktion wie var_dump() an.

Gruss

tobi
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #12 (permalink)  
Alt 03-04-2008, 16:23
23isall
 Newbie
Links : Onlinestatus : 23isall ist offline
Registriert seit: Apr 2008
Ort: siegen
Beiträge: 60
23isall ist zur Zeit noch ein unbeschriebenes Blatt
23isall eine Nachricht über ICQ schicken
Standard

Hallo Tobi,


Erst mal danke, dass du mir überhaupt hilfst
Nur bin ich ein Newbi, was PHP betrifft, aus diesem Grund wende ich mich an dieses Froum in der Hoffung, dass mir jemand weiter helfen kann.
Mit Zitat antworten
  #13 (permalink)  
Alt 03-04-2008, 16:33
23isall
 Newbie
Links : Onlinestatus : 23isall ist offline
Registriert seit: Apr 2008
Ort: siegen
Beiträge: 60
23isall ist zur Zeit noch ein unbeschriebenes Blatt
23isall eine Nachricht über ICQ schicken
Standard

@ Tobi,

Danke für den Hinweis auf; var_dump().
Hast du denn noch eine Idee wie ich das Script auf korrekte Funktion hinbekomme?
Mit Zitat antworten
  #14 (permalink)  
Alt 03-04-2008, 16:35
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Mal meine Fragen:
-Was genau steht in der Textdatei? Zeitstempel oder Passworte?
-Falls Zeitstempel: Bist du sicher, dass die nur maximal 2 Stunden als sind?
-Muss der User als Passwort wirklich die Nummer so eigeben?
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #15 (permalink)  
Alt 03-04-2008, 16:47
23isall
 Newbie
Links : Onlinestatus : 23isall ist offline
Registriert seit: Apr 2008
Ort: siegen
Beiträge: 60
23isall ist zur Zeit noch ein unbeschriebenes Blatt
23isall eine Nachricht über ICQ schicken
Standard

Zu Frage 1:
In der check_access.txt steht wie folgt nur das Passwort, dass aus Time Generiert wird:

check_access.txt
PHP-Code:
1207225603
1207226446
1207226572
1207227865
1207227889
1207227974 
Gut, man könnte das ja auch mit der Übergabe der IP in Form von:
80.121.240.132|1207227974
Überprüfen. Aber ich war zuerst mal Froh, dass ich einen Ansatz gefunden habe, was leider nicht funktionierte.

Zu Frage 2:
Das Passwort wird über Mail verschickt, dass habe ich ja so weit auch hinbekommen und sollte mit $time = time()-2*60*60; auf Gültigkeit geprüft werden.

Zu Frage 3:
Ja, der User muss das genauso eintragen, es soll halt nur ein Temporäres Passwort sein.

Geändert von 23isall (03-04-2008 um 16:51 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

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.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:28 Uhr.