Beiträge von Teron Gerofied

    Hi,

    ich hätte da mal ne theoretische Frage: Ich bin bei zwei Singlebörsen angemeldet, die, sagen wir mal, sehr schleißig programmiert wurden (die Anwendung des <script>-Tags wird nicht unterbunden...)

    Wäre es gesetzlich verwerflich einen Layer Ads Code dort einzubinden, zB von eAds ? ^^ - Immerhin sind die Webmaster doch selbst drann schuld, wenn sie sowas nicht verhindern ^^

    Bitte keine Moralprädigten... nur ob man dafür belangt werden könnte ?

    Lg

    Eine einfachere Variante wäre wohl auch noch:

    login.php

    • Prüfen von Benutzernamen und Passwort (salted Password)
    • Setze Session -> Session-Cookie: HTTP Only
    • Speichere aktuellen Timestamp in $ts
    • Schreibe $uid = uniqid() in Datenbank: user_session_salt
    • Schreibe md5($ts . $uid) in Datenbank: user_session_uniqid
    • Schreibe Cookie mit inhalt $ts (Cookie-Name: "data")

    index.php

    • Prüfe Session und hole Benutzerdaten
    • Prüfe ob: md5( $_COOKIE['data'] . user_session_salt ) == user_session_uniqid
      • Wenn nein: Sessions zerstören, alles löschen
      • Wenn ja: Dann setze neue neuen Timestamp in Cookie und generiere neue user_session_uniqid mit diesem Timestamp
        • Zeige Seite im eingeloggten Zustand

    logout.php

    • Zerstöre Session
    • Lösche Salt und Code aus DB

    Ich glaub diese Routine ist sinnvoller, da das Problem mit setcookie gelöst ist und XSS trotzdem sinnlos ist, da man ohne den Salt, der nur beim Loginmechanismus generiert wird auch mit dem Cookie nicht weiter kommt, zumindest wenn der Benutzer nicht eingeloggt ist... - und wenn er eingeloggt ist wird sowieso bei jedem Seitenaufruf ein neuner TS generiert

    EDIT:
    Man könnte am Seitenende Javascript den aktuellsten TS ($ts_new) der PHP Datei übergeben, JS einen neuen Cookie setzen lassen, und am Ende der PHP Datei den Timestamp so in die Datenbank schreiben - das würde (dank der Tatsache, dass JS alles nach der Reihe abarbeitet) verhindern, dass man per XSS den neuen Timestamp auslesen kann, sofern nach dem letzten Javascript keine GET oder POST ausgegeben werden - dann hat man aber wieder das Problem, dass HTTP only im Weg steht - ist die Frage, was sicherer ist...

    EDIT 2:
    Ok, ein Timestamp wäre eig idiotisch, denn wenn man die Sessid "gehijacked" hat muss man nur mehr auf gut Glück alle Timestamps durchrennen - Uniqid würde in dem Fall auch salt ersparen

    Hallo,

    da ich viel mit Login-Systemen zu tun hab hab ich mir mal ein System überlegt, dass XSS absolut wirkungslos machen könnte (zumindest was das Fishen von loginrelevanten Cookies angeht):

    Grundstruktur davon sieht so aus:

    login.php

    • Prüfen von Benutzernamen und Passwort (natürlich salted)
    • Setze eine Session für den Benutzer wie gehabt ( mit session_set_cookie_params() Cookie auf HTTP only setzen)
    • Speichere eine uniqid() in die Benutzertabelle, des gerade eingeloggten Benutzers
    • Lege einen Cookie mit ebendieser Uniqid an -> HTTP only

    index.php

    • Prüfe User-ID mittels Session
    • Lies die Datenbank-Tabelle aus und hole Uniqid() aus Datenbank
    • Prüfe, ob Uniqid aus Tabelle mit Cookie übereinstimmt
      • Wenn nein: Logout -> Zerstöre alle Sessiondaten, lösche Uniqid Cookie
      • Wenn ja: Zeige Seite im eingeloggtem Zustand (HIER KÖNNTE XSS nun stattfinden)

    Seitenende von index.php

    • Generiere neue Uniqid() und ersetze den aktuellen Eintrag in der Tabelle
    • Öffne eine AJAX Verbindung und lass so einen neuen Cookie mit der neuen Uniqid() (aus der Datenbank) generieren
    • Eventuell: neue Session mit regenerate_session_id() erzeugen.

    Das war nur mal so ein provisorischer Gedankengang, wie man XSS wirkungslos machen könnte:
    Dadurch, dass für den Login auch die Uniqid() benötigt wird und diese (auch wenn man es schafft den Cookie auszulesen, während die Seite aufgebaut wird, mit XSS) am Ende der Seite wieder geändert wird, ist die Seite wirkungslos noch bevor der XSS Angreifer was mit der Uniqid() anfangen kann.

    Das Problem ist hier leider mit setcookie gegeben: setcookie darf ja nicht nach einer Ausgabe kommen und die Ausgabe mit ob_start zu puffern wäre unsinnig, weil das Cookie dann erst recht wieder den aktuellen Inhalt hat und XSS nach der Ausgabe zuschlagen kann - auch den Cookie per JS zu setzen widerspricht natürlich allen Sicherheitsanforderungen - einzige Idee wäre dies mit Ajax zu lösen - Unschön halt, dass JavaScript und Cookies für diese Methode zwingend erforderlich ist...

    Das ist nur mal so ein Gedankengang wie sowas funktionieren könnte - wenn jemand eine schönere Idee für die Cookiesache am Seitenende weiß, bitte :)

    Lg
    Matze


    Und was soll eigentlich das hier? Und vor allem nur in dem einen Fall der Bedingung?

    PHP
    $_GET['file'] = utf8_decode( $_GET['file'] );

    Das kommt daher weil readfile() aus irgendeinem Grund nicht in der Lage ist, die Datei zu finden, wenn Umlaute drinn sind... Obwohl der Pfad exakt stimmt, aber trotzdem findet ers nicht, wenn Umlaute drinn sind ... Also musst ich auf ISO-8859-1 umstellen und die Funktion einbauen, dann geht es - sonst nicht, keine Ahnung wieso...

    Hallo zusammen,

    ich hab da wieder ein Problem, das für mich ein bisschen schwer zu lösen wird, da ich weder einen Mac noch das OS irgendwo laufen hab...

    Ich habe diesen Dateidownload:

    Das funktioniert super unter Win, im Mac wird (zumindest bei der PDF, und da nur der Mimetype überall anders ist, schätze ich, dass das überall so ist) eine 0-Byte-Datei an den Browser gesendet.

    Zur Information der Zeilen:

    PHP
    if( isset( $_GET['download'] ) )
        $disposition = 'attachment';
    else {
        $disposition = 'inline';
        $_GET['file'] = utf8_decode( $_GET['file'] );
    }

    Es geht weder wenn isset( $_GET['download'] ) == true noch false ist...

    Lg
    Mathias

    Hello,

    seit einem Update von Chrome (habe derzeit die aktuellste Version) hab ich einen wirklich nervtötenden Bug drinnen:

    Bei extrem vielen Seiten wird die gelbe Infoleiste eingeblendet, die anzeigt, dass ein Plugin gebraucht wird und dieses installiert werden muss - obwohl auf der Seite garkein Plugin gebraucht wird und ich alle aktuellen, notwendigen Plugins habe (Adobe Reader, Flash, Shockwave, Java, ...)

    Das Kuriose: Klicke ich auf den Button "Plugins installieren" schließt sich die Infoleiste wieder - sonst passiert nix...

    Das ist EXTREM nervend, weil sich ständig die ganze Seite nach unten verschiebt.

    Auch deinstallieren und neu installieren von Chrome hat nichts gebracht (habe die Internetdateien laut Deinstallation aber behalten...)

    Hat nochjemand das Problem?? Bzw jemand eine Idee wie ich diese Kacke ausmachen kann? Ich will garkeine Pluginhinweise von Chrome haben...

    Lg