Abou Chleih

{the magic lies between the brackets}

Menü Schließen

Kategorie: Server (Seite 2 von 2)

[WordPress] Integrieren des WordPress-Blog in die eigene Homepage #1 Einstieg + Blog-Hauptseite

Eigentlich wollte ich einen eigenen WordPress-Blog aufziehen, ähnlich diesem hier.
Doch hatte ich schon eine Homepage mit komplettem Template fertig.
So stellte sich mir die Frage, ob ich

  • einen eigenen WordPress-Theme bauen
    oder
  • WordPress in die eigene Homepage integrieren soll.

Ich entschied mich für letzteres.
Wie fängt man, aber an ein fertiges Backend in eine eigene Homepage zu integrieren?
Wie frage ich alles ab?
Man benötigt dazu die Datei wp-blog-header.php, welche sich im Stammverzeichnis des WordPress-Ordners befindet.
Die Datei lädt die ganze Umgebung, d.h. alle benötigten Funktionen, also genau das, was wir wollen.

/**
* Loads the WordPress environment and template.
*
* @package WordPress
*/

Nun lädt man die Datei via php in die eigene Seite:

 <!?php include ('meinPfad/wp-blog-header.php'); ?> 

Dies tut man am besten, der Übersichtlichkeit wegen, vor dem HTML-Tag des Dokuments:

<?php include ('wordpress/wp-blog-header.php'); ?>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8" />
<title>Blog</title>...

Nun zum eigentlichen Thema, dem Anzeigen von Posts.
In WordPress gibt es die sogenannte Loop.
Diese wird genutzt, um alle Posts mit einer Loop (while-Schleife) zu bekommen. Sie ist ganz einfach und sieht wie folgt aus:

 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php //TO DO HERE ?>
<?php endwhile; else: ?>
<p><?php _e('Sorry, keine Posts gefunden'); ?></p>
<?php endif; ?> 

In dieser while-Schleife können nun alle Objekte der Funktion the_post(); ausgelesen werden.
Hier sind folgende für meine Belange wichtig gewesen:

  • Die Post-ID:  the_ID();
  • Der Titel des Posts: the_title();
  • Die Kategorien mit Namen und Category-ID (später)
  • Die Tags: the_tags(…);
  • Das Datum: the_date();
  • Der Autor: the_author();
  • Der Inhalt: the_content();

Diese Funktion ruft man einfach innerhalb der Loop auf. So wird automatisch der Autor, das Datum, … des entsprechenden Post ausgelesen:

 <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_ID(); ?>
<?php the_title(); ?>
<?php the_tags(__('Tags: '), ', ', ' — '); //Die Tags werden mit Komma getrennt ?>
<? the_date();?>
<?php the_author(); ?>
<?php the_content(); ?>
<?php endwhile; else: ?>
<?php _e('Sorry, bisher wurden keine Beiträge geschrieben. Nichts gefunden.'); ?>
<?php endif; ?>

Das einzige, kleine Problem, welches ich noch hatte, war das Auslesen der Kategorien mit Name.
Dies war aber im Endeffekt relativ einfach gelöst, indem man die Funktion get_the_category(); in einer foreach-Schleife ausführte und die Rückgaben ausliest und ausgibt.
Es sollte grob so aussehen (Achtung, etwas buggy mit dem Komma):

<?php _e("Kategorien: "); ?> <?php //the_category(',')
foreach((get_the_category()) as $category) {
    echo $category->cat_name . ', ';
}?>

Im Endeffekt sieht der ganze Code in etwa so aus, wenn man ein paar eigene divs mit einfließen lässt, um die Ausgabe etwas zu designen:

 <div  style="width:450px;min-height:749px;">

<?php if (have_posts()) : while (have_posts()) : the_post(); _e("<br>");?>
<div class="post" id="post-<?php the_ID(); ?>">
<h1><?php the_title(); ?></h1>
<div class="meta"><?php _e("Kategorien: "); ?> <?php //the_category(',')
foreach((get_the_category()) as $category) {
    echo $category->cat_name . ', ';
}?> <br/>
<?php the_tags(__('Tags: '), ', ', ' — '); ?>
<?php _e("Geschrieben am: "); ?> <? the_date(); _e("<br>");?>
<?php _e("Geschrieben von: "); ?><?php the_author(); ?>
<?php edit_post_link(__('edit')); ?>
<?php _e("<hr/>"); ?>
</div>
<div class="storycontent">
<?php the_content(__('(weiterlesen...)')); ?>
</div>
</div>

<?php endwhile; else: ?>
<p><?php _e('Sorry, bisher wurden keine Beiträge geschrieben. Nichts gefunden.'); ?></p>
<?php endif; ?>
</div> 

Der Blog ist eingebunden.
Part 2 mit Suche, Part 3 mit Archiv für Kategorien, … folgen.

Cross Site Scripting #2 – Bekannte Beispiele

Um sich die Wirkung und das Ausmaß eines XSS-Angriffs auszumalen, möchte ich einige Beispiele aus den letzten Jahren einbringen:

Im Jahre 2010 verschafften sich Cracker (im Sinne von destruktiven Hackern) Zugang zu verschiedenen Servern der Apache Foundation [1].
Dieser Angriff wurde durch ein Ticket mit manipulierte Webadresse durchgeführt.
Durch dieses Ticket sollte die Cookie-Session des angemeldeten Users gestohlen werden (Session stealing).

Durch diesen und einen zweiten, parallelen Bruteforce-Angriff erlangten die Angreifer dann die Kontrolle über den JIRA-Server, wo sie ungehindert Dateien durchstöbern und herunterladen konnten. Zusätzlich wurden Passworteingaben abgefangen.

Die Folgen waren, dass die Server für einige Stunden offline waren, die Passwörter geändert, die Sicherheitslücken gestopft und der Hauptserver komplett ausgetauscht werden musste.


Im Oktober 2005 wurde ein XSS-Wurm in MySpace entdeckt, welcher innerhalb von 20 Stunden über eine Millionen Profile befiel.

Der Entwickler des Wurms Samy Kamkar, dessen Vorname auf der Bezeichner des Wurms ist, zielte darauf ab, die Freundesliste des Entwicklers zu füllen.
Sobald jemand auf ein „infiziertes“ Profil klickte, lud das JavaScript-Script und addete Samy Kamkars Account zur Friendlist hinzu.
Zudem erschien ein „Status“-Post mit dem Inhalt: „but most of all, Samy is my hero“.

Nachdem MySpace den Wurm entdeckte, schlossen sie die Lücke und verklagten Kamkar.
Der Entwickler wurde zu drei Jahren Computerabstinenz, 90 Tagen gemeinnütziger Arbeit und einer Entschädigung in unbekannter Höhe verurteilt.
Der Wurm ist und bleibt trotzdem der sich am schnellsten verbreitende Wurm in der Computergeschichte.


Cross Site Scripting #1 – Definition und Einführung

Wer einmal Webseiten gebaut hat oder Datenbanken in seine Homepage integrierte, der wird sicher auch über das Thema XSS (Cross Site Scripting) gestolpert sein.
Aber was ist eigentlich XSS?

Definition
Es ist das Ausnutzen einer Sicherheitslücke über diese man Daten andere Nutzer ausspähen oder manipulieren kann.
Das Scripting kommt daher, dass zur Ausnutzung der Lücken meist Scripts genutzt werden, bspw. in Javascript.

Einführung
Erst einmal. Wessen Schuld ist es, wenn XSS nutzbar ist?
Hier liegt die Schuld ganz beim Admin oder Developer der Seite, denn mit relativ einfachen Mitteln kann man es den Hackern und Scriptern (das schließt Scriptkiddies mit ein) ziemlich schwer machen.
Denn eine Eingabe eines Users, sei es über eine Kommentarfunktion oder über die GET/POST-Parameter in PHP müssen gefiltert, d.h. nach unerlaubten Zeichen, Scripts etc. durchsucht werden.
Achtung: Auch wenn man eines der großen CMS nutzt, ist man davor nicht sicher. Deshalb immer auf neue Versionen updaten! Dort werden dann bekannte Sicherheitslücken geschlossen

Arten:
reflective/non-persistend XSS:
Hier wird ein GET-Parameter auf einer Seite manipuliert um Schadcode auszuführen.
Dies funktionert bspw. so:
Wir haben eine Seite mit einer Suchfunktion, welche den eingegebenen Suchbegriff als GET-Parameter weiterverarbeitet.
http://www.xyztestsiteabc123.com?search=Hier ist mein Suchbegriff
Falls die Seite den Suchbegriff irgendwann also wieder ausgibt, würde das auf der Seite so aussehen:

Sie suchten nach: Hier ist mein Suchbegriff

Nun kann man, falls die Eingaben der Suchfunktion nicht gefiltert werden, jeglichen Code eingegeben:

 http://www.xyztestsiteabc123.com?search=<img alt="" src="http://abouchleih.de/spaceinv_code1.png" width="42" height="42" /> 

Das ist noch nicht so schlimm, denn es wird hier „nur“ ein Bild auf eine Seite eingefügt, dennoch sollten solche Eingaben verboten werden, da sie erstens störend wirken und zweitens auch JavaScript so ausgeführt werden kann.

Das Ergebnis würde also beim obigen eingeben so aussehen:

Sie suchten nach:

Allerdings ist diese Methode recht harmlos, da man die User erst auf die manipulierte Seite locken müsste und die Seite auch nicht gespeichert ist.

persistend XSS:
Hier wird im Gegensatz zu oben, der Code in der Website gespeichert und bleibt so sichtbar.
Nutzbar ist dies bei ungefilterten Kommentarfunktionen in einem Gästebuch.
Wird nun ein Kommentar mit Code gepostet, so wird dieser bei jedem Aufruf der Website ausgeführt.

Beispielcode:

Hallo!<script type="“text/javascript“">
alert("Dies ist ein Script, welches zur anschaulichen Darstellung von XSS auf einer Website verwendet wurde. Lies den Artikel für mehr Info 😉 ");
</script>

Das Ergebnis könnt ihr beim Klick auf den Button begutachten.

dombasiertes XSS:
Ähnlich dem reflective XSS, nur dass hier die Webanwendung/-site nicht beteiligt ist.
Der Code wird also nur auf dem Clientrechner verarbeitet.

Zu Part 2 hier geht’s hier entlang.

RAID Array degraded – Vorgehensweise zur Wiederherstellung

Sollte es zu einem Ausfall eines RAID Arrays kommen, kann man unter Umständen durch ein Software-RAID wieder auf die Daten zugreifen.
Dazu gibt es für das Betriebssystem Linux das Programm mdadm.

Dieses installieren wir über das Terminal mit dem Befehl

Zitat:

sudo get-apt install mdadm

Bei der Installation wird man ebenfalls gefragt, ob man Postfix installieren möchte.
Wählt hier die Standardeinstellung.

Nachdem das Programm installiert wurde, begeben wir uns erneut in das Terminal.
Von dort aus geben wir folgendes ein:

Code:

sudo mdadm --assemble --scan
sudo mdadm --assemble --run /dev/md0 /dev/sdg

Nun sollte man das Volume mounten können, dies geschieht entweder per „Disk Utility“(unter Linux Mint) oder ebenfalls per Terminal mit folgenden Befehlen:

Code:

sudo mkdir /media/raiddisk
sudo chmod 777 /media/raiddisk
sudo mount /dev/md0 /media/raiddisk

Nun solltet ihr wieder auf die Dateien zugreifen können

[ratings]

© 2018 Abou Chleih. Alle Rechte vorbehalten.

Thema von Anders Norén.