blog.bartlweb - a technologist's external brain

Thema: Webentwicklung

Typo3-Installation absichern

Wie bei jedem öffentlich zugänglichen System sollte man auch bei Typo3 auf die Sicherheit der Installation achten. Die folgenden Tipps und Einstellungen helfen dabei.

Backend

  • entfernen Sie den Standard-Admin-Benutzer "admin" bzw. ändern Sie auf jeden Fall das Default-Passwort ("password")
  • entfernen Sie nicht benötigte Extensions
  • Typo3-Core und Extensions regelmäßig updaten

Install-Tool

generelle Einstellungen

  • ändern Sie das Install-Tool Passwort (Default-Passwort: "joh316")
  • generieren Sie den Encryption-Key neu

Änderung der generellen Konfiguration ("5: All Configuration" / localconf.php)

  • E-Mail-Benachrichtigung bei fehlerhaften Backend-Logins aktivieren
[BE][warning_email_addr] = your@mail.com
[BE][warning_mode] = 0
  • Cookies gegen XSS schützen
[SYS][cookieHttpOnly] = 1
  • Cookies bei HTTPS-Verbindung verschlüsselt senden

Typoscript Operatoren

Typoscript hat eine einfache Syntax mit diversen Operatoren und Kniffen die hier kurz erläutert werden.

Strukturierung

Generel handelt es sich bei Typoscript-Konfigurationen um PHP-Arrays und daher gibt es mehrere Ebenen und Strukturierungen. Der Punkt trennt verschiedenen Ebenen und geschwungene Klammern fassen diese zusammen.

Daher sind die beiden unteren Schreibweisen equivalent:

page = PAGE
page.typeNum = 0
page.10 = TEXT
page.10.value = Hello World!
page.10.wrap = -- | --
page.10.case = upper
page = PAGE
page {
  typeNum = 0
  10 = TEXT
  10 {
    value = Hello World!
    wrap = -- | --
  }
  10.case = upper
}

Kommentare

Wie auch in PHP gibt es in Typoscript Kommentare.

Technologie-Messages per Typoscript

Bei vielen Webanwendungen gibt es Anforderungen an die Browser und Verbindungen. So muss oft JavaScript aktiviert sein, es sollte die Verbindung verschlüsselt erfolgen und manchmal werden auch diverse Browser nicht unterstützt. Um den Nutzer darüber zu informieren hilft das folgende Typoscript-Snippet, dass je nach Status und Anforderung den Benutzer benachrichtigt.

lib.login_message = COA
lib.login_message.stdWrap {
  wrap = <div class="message">|</div>
  required = 1
}
 
# nojs message
lib.login_message.10 = HTML
lib.login_message.10.value (
  <noscript><h1>Bitte JS aktivieren!</h1></noscript>
)
 
# unsuported browser
lib.login_message.20 = HTML
lib.login_message.20.value (
  <h1>Nicht unterstützter Browser!</h1>
)
 
[browser = firefox]
  lib.login_message.20.value =
[global]
 
# nossl message
lib.login_message.30 = HTML
lib.login_message.30.value (
  <h1>Unverschlüsselte Verbindung!</h1>
)
 
[globalString = IENV:TYPO3_SSL=1]
  lib.login_message.30.value =
[global]

Opensearch-Plugin für Firefox und InternetExplorer erstellen

Haben Sie schon einmal daran gedacht die Suche Ihres Blogs oder Ihrere Webseite in das Suchfeld von Firefox oder InternetExplorer zu integrieren? Der OpenSearch-Standard macht es möglich.

OpenSearch-XML-Datei

Die Datei gibt einen Link, inkl. Parameter der immer den vordefinierten Term "{searchTerms}" enthalten muss, auf die Zielseite der Suche und einen Link auf eine Schnittstelle die Suchvorschläge per JSON-Objekt zurückliefert an.

<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
  <Url type="text/html" template="http://example.com?q={searchTerms}"/>
  <Url type="application/x-suggestions+json" template="http://example.com/suggest?q={searchTerms}"/>
</OpenSearchDescription>

Plugin manuell Verlinken

Wenn Sie das OpenSearch-Plugin auf der Webseite manuell verlinken wollen, benötigen Sie folgenden JS-Aufruf.

Typoscript in externe Dateien auslagern

Für alle die Ihre Typo3-Projekte gerne ins SVN einchecken stellt sich immer schon die Frage wie das zugehörige TypoScript in das Repository kommt. Die Möglichkeit Typoscript in externe Dateien auszulagern macht es nun möglich. Auch das Inkludieren von Dateien in bereits inkludierten Dateien ist möglich und Conditions funktionieren in externem Typoscript mittlerweile auch.

einbinden von externen Typoscript-Dateien

Das folgende Typoscript bindet externe Dateien die weiteren Typoscript-Code beinhalten ein. Die Dateiendung darf dabei beliebig gewählt werden (zu empfehlen ist entweder .txt oder .ts).

<INCLUDE_TYPOSCRIPT: source="FILE: fileadmin/typoscript/filename.txt">

Ein besonderes Augenmerk bei dieser Methode sollte auf die Reihenfolge beim inkludieren der Dateien gelegt werden.

DirectMail Wizard konfigurieren

Gerade für nicht so versierte Redakteure ist es hilfreich den Assistenten der Typo3-Extension DirectMail einzuschränken und nicht benötigte Funktionen auszublenden, das folgende Typoscript-Snippet für das User-TS macht es möglich

#
# configure direct_mail wizard
#
tx_directmail.hideTabs = ext,dmail
tx_directmail.defaultTab = int
tx_directmail.hideSteps = cat

Optionen

  • hideTabs: blendet die Toggle-Boxen im Versandhauptmodul aus (int - Interne Seiten versenden, ext - Externe Seite versenden, dmail - bereits versendete Mails, quick - Quickmail)
  • defaultTab: öffnet die definierte Toggle-Box beim Aufruf des Assistenten
  • hideSteps: bietet die Möglichkeit den Schritt "categorized content" im Wizard auszublenden

Contentelemente in Typo3-Extension rendern

Die unteren zwei Zeilen PHP-Code ermöglichen es Content-Elemente aus einer Typo3-Extension heraus zu rendern und somit in die eigenen Extension einzubinden. Bekannt muss einem dabei lediglich die ID des Content-Elementes sein.

$tt_content_conf = array('tables' => 'tt_content','source' => "45",'dontCheckPid' => 1);
$content .= $this->cObj->RECORDS($tt_content_conf);

E-Mail-Adressen in Typo3-Extensions auf Gültigkeit prüfen

Des öfteren steht man vor der Aufgabe in selbstgeschriebenen Typo3-Extensions E-Mail-Adressen bei der Eingabe auf deren Gültigkeit zu prüfen. Das Typo3-Framework bietet für diese Aufgabe bereits eine fertige Funktion an.

if (t3lib_div::validEmail($email)) {
  echo "valid E-Mail!";
}

dynamisch erzeugtes CSS und JS aus Typo3-Extension heraus einbinden

Gerade bei GoogleMaps-Extensions wird oft dynamisch erzeugtes JavaScript oder CSS benötigt. Um dieses aus einer Extension heraus in den Head-Bereich der Webseite einzubinden, liefert Typo3 zwei Funktionen:

$GLOBALS['TSFE']->setJS($this->extKey, 'alert("dynamisches JS");');
$GLOBALS['TSFE']->setCSS($this->extKey, '.dynamisch {margin: 1em}');