Seite 3 von 3 ErsteErste 123
Ergebnis 41 bis 46 von 46

Thema: Browsergames (Techniken)

  1. #41
    Okay, hier mal ein kleines Beispiel. Ich verwende hier meine eigenen Kontentionen; beispielsweise steht die Dateiendung .hic für HTML-Includes.
    PHP-Code:
    <?php
    // Das Grundgerüst der Seite.
    $template file_get_contents('res/base.hic');

    switch (
    $_REQUEST['target'])
    {
      case 
    'contact':
        
    $body file_get_contents('res/contact.inc');
        break;
      case 
    'about':
        
    $body file_get_contents('res/about.inc');
        
    $body str_replace('{time}'date('H:i:s'), $body);
        break;
      case 
    'home':
      default:
        
    $body file_get_contents('res/home.inc');
    }

    $template str_replace('{body}'$body$template);
    ?>
    Code:
    [res/base.inc]
    <html>
      <head>
        <title>{title}</title>
      </head>
      <body>
        <div><img src="src/banner.png" alt="Tollsoft ist toll!"></div>
        <div>
    {body}
        </div>
        <div>
          Dieser Footer ist (c)2014, Tollsoft.<br>
          Best viewed with NCSA Mosaic at 640x480.
        </div>
      </body>
    </html>

    Code:
    [res/about.inc]
          <h1>Die Firma Tollsoft</h1><br>
          Die Firma Tollsoft wurde gegründet, um tolle Sachen zu machen.<br>
          Wir produzieren auch Uhrzeiten, so wie diese: {time}

    Komplexere Sachen löse ich dadurch, daß ich sie in einer separaten PHP-Datei behandle und die bei Bedarf inkludiere.

  2. #42
    Zum Thema index.php?content=start vs. start.php:

    Ob du jetzt in der index.php ne Abfrage machst, ob $content === "start" oder ob du in der start.php einfach nur den Kram hast, der nach der Abfrage ausgeführt würde, kommt ja dann aufs gleiche raus.

    Mit Jeez' Variante könnte man etwa so verfahren:
    contact.php
    PHP-Code:
    <?php 
    $template 
    file_get_contents('res/base.hic'); 
    $body file_get_contents('res/contact.inc'); 
    $template str_replace('{body}'$body$template); 
    ?>
    about.php
    PHP-Code:
    <?php 
    $template 
    file_get_contents('res/base.hic'); 
    $body file_get_contents('res/about.inc'); 
    $body str_replace('{time}'date('H:i:s'), $body); 
    $template str_replace('{body}'$body$template); 
    ?>
    Das hat zwar den Nachteil, dass ein paar Zeilen doppelt sind, aber dafür hat man ordentliche Links.

    Übrigens noch ein kleines Beispiel, wie das mit Mannis Klasse aussehen könnte:

    start.tpl (Endung kann natürlich auch anders sein)
    HTML-Code:
    <html>
      <head>
        <title>{title}</title>
      </head>
      <body>
        <INCLUDE! navigation.tpl>
        <div>{text}</div>
      </body>
    </html>
    navigation.tpl
    HTML-Code:
        <ul>
          <BLOCK! navigation>
          <li><a href="{navigation.href}">{navigation.name}</a></li>
          </BLOCK!>
        </ul>
    start.php
    PHP-Code:
    <?php
      
    include "template.class.php";
      include 
    "setup_template.php";
      include 
    "navigation.php";

      
    $template->set_variable(array("title" => "Start""text" => "Lorem Ipsum"));
      
      
    $template->parse("start");
    ?>
    setup_template.php
    PHP-Code:
    <?php
      $template 
    = new Template('templates/''templates/cached/');
      
      
    $templatedir dir($template->path);
      while((
    $filename $templatedir->read()) !== false)
      {
        if(
    preg_match('#^(.*?)\.tpl$#i'$filename$m))
        {
          
    $templates[$m[1]] = $filename;
        }
      }
      
    $template->setfile($templates);
    ?>
    navigation.php
    PHP-Code:
    <?php
      $navigation 
    = array();
      
    $navigation[] = array("href" => "start.php""name" => "Start");
      
    $navigation[] = array("href" => "downloads.php""name" => "Downloads");
      
    $template->set_block_variable("navigation"$navigation);
    ?>
    Dazu drei Anmerkungen:
    1. Es sieht mit den vielen Dateien ziemlich umständlich aus, aber davon muss man pro Seite nur zwei (z.B. start.tpl und start.php) schreiben
    2. Die setup_template.php kann man sich sparen, indem man nur die Templates lädt, die man braucht, aber ich lass aus Bequemlichkeit immer alle laden, die sich im entsprechenden Verzeichnis befinden.
    3. Mannis Klasse erlaubt foreach-Schleifen (<BLOCK!>), Bedingungen (<IF!>, <ELSE!>) und Includes (<INCLUDE!>) und ist damit sehr flexibel.

  3. #43
    @DFYX & Jeez:
    Danke für die Tutorials !


    Ich wollte gerne mal eine Injection testen.
    Also hab ich mir nen Code zusammengebastelt.
    Leider funktioniert das nicht...

    test.php
    PHP-Code:
    <?php
    $verbindung 
    mysql_connect ("...",
            
    "...""...")
            or die (
    "keine Verbindung möglich.
             Benutzername oder Passwort sind falsch"
    );
            
            
    mysql_select_db("usr_web455_4")
            or die (
    "Die Datenbank existiert nicht.");
        
    //Dateien ausgeben

    $id=$_GET["id"];

    $abfrage "SELECT * FROM test WHERE id='$id'";
    $ergebnis mysql_query($abfrage);


    ?>

    form.php
    HTML-Code:
    <form action="test.php" method="GET">
    <input type="text" name="id"><br />
    
    <input type="submit" value="Submit">
    </form>
    Ins Input schreibe ich 1'"; $abfrage="DELETE FROM test"; //
    Trotzdem funktioniert es nicht...

  4. #44
    Zitat Zitat
    Ins Input schreibe ich 1'"; $abfrage="DELETE FROM test"; //
    Das wäre auch ein PHP Skript,d as du da absendest, so geht das nicht! Die Injection geschieht ja innerhalb einer Zeichenkette, die als Query asgeführt wird.

    PHP-Code:
    $abfrage "SELECT * FROM test WHERE id='$id'"
    Eine Injection müsste so aussehen: 1'; DELETE FROM `test` WHERE '1'='1

    Damit lautet die Abfrage:

    PHP-Code:
    $abfrage "SELECT * FROM test WHERE id='1'; DELETE FROM `test` WHERE '1'='1'"
    Womit du zwei funktionsfähige Queries hast.

    PHP lässt es aber nicht ganz so einfach zu:

    1. Magic Quotes escapen einige Sonderzeichen. Diese Einstellung ist sehr oft aktiviert, fällt aber in der nächsten Version von PHP weg. Dann ist die Einstellung unveränderlich deaktiviert, d.h. keine maskierung mehr.
    2. MySQL-Sicherheitsmechanismus: Nur eine Abfrage kann innerhalb von mysql_query() ausgeführt werden. Wiege dich da aber nicht in Sicherheit, das ist kein Schutz. Vor allem wenn die Magic Quotes bald deaktiviert werden.

  5. #45
    Zitat Zitat von mitaki Beitrag anzeigen
    MySQL-Sicherheitsmechanismus: Nur eine Abfrage kann innerhalb von mysql_query() ausgeführt werden. Wiege dich da aber nicht in Sicherheit, das ist kein Schutz. Vor allem wenn die Magic Quotes bald deaktiviert werden.
    Yup. Man kann nämlich auch aus zwei Abfragen einfach eine Abfrage mit zwei Unterabfragen machen. SQL ist ziemlich mächtig.

  6. #46
    @mitaki:

    Ehrlich gesagt hab ichs mit deiner Methode auch schon versucht, allerings ohne WHERE bei DELETE.
    Hat mich zu keinem Erfolg geführt, und deshalb habe ich die Variante mit dem PHP Script versucht.

    Hing vllt an den von dir erwähnten Sicherheitsmaßnahmen.

    *Edit*

    Nein, so funktioniert es nicht.
    Selbst dann nicht, wenn ich den Code per Hand ins Script schreibe.

    PHP-Code:
    $abfrage "SELECT * FROM test WHERE id='1'; DELETE FROM `test` WHERE '1'='1'"

    Geändert von Antares (25.12.2006 um 20:50 Uhr)

Berechtigungen

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