Archiv für die Kategorie » myQuellcode «

Website laden: GET- und POST-Request

Samstag, 29. Mai 2010, 14:12 Uhr | Autor: ich

Es kann verschiedene Gründe geben weshalb der Download einer Website gewünscht wird. Bei mir hat es meist damit zutun dass ich eine Schwachstelle in einer Website gefunden habe und die anfallenden Daten speichern muss , um diese einfacher auswerten zu können.

GET-Request

Eine Website zu laden, deren URL komplett mit allen übertragenen Parametern in der Adresszeile des Browsers angezeigt wird, ist mit PHP sehr einfach möglich.

$seite = file_get_contents('http://sld.tld/?x=1&y=2');
$datei = fopen('file.txt', 'w');
fputs($datei, $seite);
fclose($datei);

Die Website http://sld.tld/?x=1&y=2, bzw. der Quellcode der im Browser angezeigt werden würde, wird in der Datei file.txt gespeichert.

POST-Request

Werden in der Adresszeile allerdings nicht alle übertragenen Parameter angezeigt, dann muss schon etwas mehr Aufwand betrieben werden, um die Seite speichern zu können.

$post = array(
  'var1' => 'a',
  'var2' => 'b',
  'var3' => 'c'
);

$context_options = array (
  'http' => array (
  'method' => 'POST',
  'header' =>
    "Content-type: application/x-www-form-urlencoded\r\n".
    "Content-length: ".strlen(http_build_query($post))."\r\n".
    "Referer: http://sld.tld \r\n".
    "User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)\r\n",
  'content' => http_build_query($post)
  )
);

$context = stream_context_create($context_options);
$seite = file_get_contents(
  'http://sld.tld/page',false,$context
);

$datei = fopen('file.txt', 'w');
fputs($datei, $seite);
fclose($datei);

Auch dieses Beispiel speichert die Website in der Datei file.txt ab. Die einzelnen zu übertragenen Parameter werden in dem Array der Variable $post hinterlegt. Da manchmal der Referer, also die aufrufende Seite, für die korrekte Funktion einer Seite erforderlich ist, kann auch dies hinterlegt werden.

Thema: myQuellcode | Kommentare geschlossen

Menü-Sonderanfertigung für Website Baker

Freitag, 4. April 2008, 23:59 Uhr | Autor: ich

Für nicht zu umfangreiche WebSites benutze ich gerne das CMS Website Baker, da das Backend auch von Usern bedient werden kann, durch deren Adern keine Bits & Bytes fließen. ;O)

Einen Haken hat Website Baker: Wenn ein Menü verschachtelt ist, mit Sub- und SubSubMenüs, dann ist die eingebaute Funktion show_menu relativ unbrauchbar und das Modul show_menu2, welches man nachinstallieren kann, taugt leider auch nicht viel. Die Doku zu show_menu2 ist grottig und die Beispiele zeigen nicht das was ich haben möchte.

Mit der eingebauten show_menu-Funktion sieht ein Menü z.B. so aus:

Da diese Darstellung sehr unbefriedigend ist und immer nur der gerade aktive Menüpunkt hervorgehoben wird, habe ich an einer Systemdatei des CMS etwas rumgefingert und dann sieht das gleiche Menü folgendermaßen aus:

In die class.frontend.php von Website Baker 2.6.7 habe ich ab Zeile 367 (V 2.7: Zeile 381) folgendes eingefügt:

if (ROOT_PARENT==$page['page_id'] and $class==' class="menu_default"') {
$class = str_replace('menu_default"', 'menu_default level0"', $class);
} elseif (PARENT==$page['page_id'] and $class==' class="menu_default"') {
$class = str_replace('menu_default"', 'menu_default level1"', $class);
} elseif (LEVEL==0 and $class==' class="menu_current"') {
$class = str_replace('menu_current"', 'menu_current level0"', $class);
}

Und das CSS dazu enthält folgendes:

#menue { font-size: 0.8em; line-height: 25px;}
#menue ul { margin: 0; padding: 0; }
#menue ul li { list-style: none; display: inline; margin: 0; padding: 0;}
#menue ul li a { color: #222222; text-decoration: none; display: block; padding-left: 5px; background-image: url(../img/menu-bg.jpg); border-bottom: 1px solid #aeaeae; }
#menue ul li a:hover {background-color: #cccccc; }
#menue ul li a.menu_current { background-color: #cccccc; color: #000000; }
#menue ul ul li a {padding-left: 20px; background: #ebebeb; }
#menue ul ul ul li a { padding-left: 35px; }
#menue ul ul ul ul li a { padding-left: 45px; }
#menue ul li a.level0 { background-image: url(../img/menu-activ-bg.jpg); color: #FFF;}
#menue ul li a.level1 { background-color: #ebebeb; color: #066a38;}

Vielleicht bin ich auch nur zu dumm, um das Modul show_menu2 richtig zu benutzen, aber nach mehreren Stunden tüfteln, Googlesuche und Doku lesen, war es für mich sehr viel einfacher (und schneller) etwas am Website Baker Quellcode abzuändern, was nun genau das macht was ich will. Bei solchen Aktionen lernt man auch etwas über das Innenleben einer Open Source Software. :O)

Thema: Open Source, Software, myQuellcode | 5 Kommentare