Mit einem einfachen „Trick“ könnt ihr die wiederkehrende Tipparbeit in der Windows Kommandozeile vereinfachen: Aliase.
Gemeint sind selbst definierte (zumeist kurze oder einfache) Befehle, die andere (zumeist lange oder komplexe) Befehle ersetzen oder mehrere Befehle kombinieren.

Ein paar Beispiele, welche komplexeren Befehle durch einen einfachen Alias ersetzt werden könnten:

:ausführlichen IP-Config-Bericht in die Zwischenablage
ipconfig /all | clip
: Einfacher Netzwerkreset
ipconfig /flushdns && ipconfig /release && ipconfig /renew
: WLAN-Passwort von einem WLAN anzeigen
netsh wlan show profile [WLAN-Name] key=clear
: Git Branch aktualisieren, Pakete installieren, lokale Variable setzen und Node starten
git pull && npm i && set envtype=localtest && npm run debug

Aliase erstellen

windows-cmd-aliase-befehle-commands-path

Erstellt zuerst einen neuen Ordner, irgendwo auf eurem PC und kopiert euch den Pfad dorthin, z.B.: C:/aliase

Öffnet Erweiterten Systemeinstellungen (Start -> Erweiterte Systemeinstellungen oder Ausführen -> sysdm.cpl) -> Erweitert -> Umgebungsvariablen und fügt dort diesen Pfad im oberen und unteren Teil jeweils zu Path hinzu:

Dies bewirkt, dass alle Inhalte dieses Ordners jederzeit über die Kommandozeile aufgerufen werden können, also global aufrufbar sind.
Startet alle offenen CMD-Fenster danach neu, sonst kommt die Änderung nicht an.

Anschließend erstellt ihr euch in dem Ordner Dateien mit einem Dateinamen nach Format: [Befehl].bat – mit dem gewünschten Befehl/Alias. Beispielsweise: ipr.bat (Eselsbrücke „IP-Reset“)
Öffnet die Datei in einem Texteditor und fügt ein:

REM ipr.bat:
@echo off
echo Run: ipconfig /flushdns + /release + /renew
ipconfig /flushdns && ipconfig /release && ipconfig /renew

oder pir.bat („pull-install-restart“):

REM pir.bat:
@echo off
echo Run: git pull + npm i + npm run debug
git pull && npm i && npm run debug

REM und echo sind optional und dienen nur zur Info. Nachdem ihr die Datei gespeichert habt, lässt sie sich per Doppelklick starten und per CMD wie ein Befehl aufrufen:

Aliase mit Parametern

Ein weiterer Punkt kann noch wichtig sein: Wenn ihr dynamische Informationen (Parameter) an das Skript hinter dem Alias geben müsst. Beispielsweise braucht das Auslesen des WLAN-Schlüssels den WLAN-Namen (SSID) dafür oder der Ping brauch ein Pingziel.
Parameter lassen sich in Batch Skripte entweder per %1 … %9 (1. bis 9. Parameter) oder %* (alle angegebenen Parameter nacheinander) übergeben. Folgende Beispiele sind nicht besonders sinnvoll und sollen nur der Demonstration dienen:

REM rf.bat:
@echo off
echo unveil + delete %*
attrib -r -a -s -h %*&&del /f /q %*
REM p.bat:
@echo off
echo Usage: p [target] [count] [version]
echo ping %1 -n %2 -%3
ping %1 -n %2 -%3

Ein kleiner Aufwand für dich, aber eine große Erleichterung für deine Finger! 😉
Ich verwende Aliase, da ich als Programmierer im Alltag einige Befehle dutzende Male pro Tag ausführen muss.

Dieser Beitrag ist eine Fortsetzung der kleinen Artikelserie zur Optimierung der HTTP-Header für mehr Sicherheit auf der Webseite und für alle Webseitenbesucher. In Teil 1 ging es um die zwei noch recht einfachen Header HSTS und X-XSS-Protection. Teil 2 wird nun den recht komplexen aber mächtigen Header Content-Security-Policy behandeln.
Es benötigt vom Webmaster schon einiges an Vorbereitung und Testing, um mit diesem Header nicht auch Schaden anzurichten, aber der Zugewinn an Schutz gegenüber Angriffen oder Code Injection ist bemerkenswert.

CSP für umfangreiche Datenherkunftseinschränkung

Der Content-Security-Policy Header überprüft die Art und Herkunft von Daten und Anfragen während des Ladens und kann darauf reagieren. So können beispielsweise bestimmte Datentypen wie Skripte oder Stylesheets, die von einer anderen URL als der gerade zu ladenden Webseite angefragt werden, geblockt werden. Damit wird verhindert, dass unerwünschte, fremde oder gefährliche Inhalte geladen und ausgeführt werden. Das ist für gewöhnlich das Ziel von XSS-Angriffen, welche über zahlreiche Tricks versuchen, schädliche Inhalte in vertrauenswürdige Seiten einzubinden.
Damit das jedoch so funktioniert, muss der Webmaster für alle oder einzelne Inhaltstypen die jeweiligen vertrauenswürdigen Quellen definieren. Hier wird es knifflig. Vergisst der Admin eine vertrauenswürdige Quelle, werden Inhalte von dort nicht mehr geladen und fehlen auf der Webseite. Das kann dazu führen, dass Schriftarten oder Bilder fehlen, Skripte und somit ganze Funktionen nicht mehr laufen und die Webseite sich in andere Seiten nicht mehr einbetten lässt. 
Die vertrauenswürdigen Ursprünge sind entweder bekannt oder müssen erarbeitet werden.

1. Informieren

Eine zu restriktiv gesetzte CSP kann die Webseite wie gesagt teilweise beschädigen. Ich empfehle daher die mehrstufige Vorgehensweise: Informieren, testen, optimieren und schlussendlich aktivieren.

Ein erster Blick lohnt beispielsweise bei MDN. Hier sehen wir, welche Direktiven und welche Werte möglich sind. Ich gehe später nochmal genauer auf die einzelnen Werte ein. Erst einmal solltet ihr euch einen groben Überblick holen. Nutzt für weitere Informationen neben diesem Artikel auch die Intros von html5rocks.com, SelfHTML, den Mehrstufen-Ansatz von dareboost.com und die dort verlinkten weiteren Artikel zu CSP-Basics und auch die vielen kleineren Webseiten und Blogger mit deren CSP-Empfehlungen.

2. Testen

Wir beginnen mit Tests, die keine Schäden anrichten können. Dazu nutzen wir das Report-Only Feature der CSP. Hierfür wird eine valide CSP über Content-Security-Policy-Report-Only gesetzt, angewendet aber nicht ausgeführt. Es werden Warnungen und Fehler ausgegeben, aber keine Anfragen tatsächlich blockiert. Gesetzt wird es wie gehabt in der .htaccess der Webseite:

<IfModule mod_headers.c> 
  Header always set Content-Security-Policy-Report-Only: "default-src 'self'; img-src 'self' https://secure.gravatar.com https://s.w.org https://wordpress.org https://ps.w.org data:; font-src 'self' fonts.gstatic.com data:; object-src 'none'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; connect-src 'self'; child-src 'self'; report-uri https://report-uri.de/report.php;"
</IfModule>

Der Inhalt dieser CSP ist erst einmal nur kopiert von kittpress.com und angepasst an das Report-Only Feature via .htaccess. Von hier arbeite ich mich dann weiter.

Die CSP wird nun theoretisch angewendet, aber nicht endgültig ausgeführt. Nun könnt ihr anhand der Browser-eigenen Dev-Tools und der Reports die Problemstellen identifizieren.
Wie ihr eine Report-Schnittstelle einrichtet, die beispielsweise Reports in eine Logdatei schreibt, habe ich im ersten Teil dieser Artikelserie erklärt. Ihr könnt auch genau dieselbe Reportschnittstelle hierfür nutzen, das funktioniert einwandfrei. Alternativ könnt ihr auch externe Report Services wie diesen als Ziel für eure Reports wählen.
Gegenüber euren Browsertools haben die Reports den Vorteil, dass jede CSP-Verletzung jedes Website-Besuchers an euch gemeldet wird – ohne, dass ihr dafür dann noch etwas tun müsst. Außerdem habt ihr alle Meldungen dann in einer großen und zentralen Server-Log (ggf. auch per Mail) und müsst nicht selbst rumsurfen und die Devtools abkopieren. Es geht ansonsten aber auch ohne report-uri.

3.1 Optimieren

Bei meinem ersten Test landeten weit über 100 Reports innerhalb von 1 Minute in der Report-Log – das reicht für eine erste Optimierung. Also habe ich die CSP erst einmal wieder deaktiviert/auskommentiert und die ersten Ausnahmen erstellt. Dazu habe ich mir jeden Report einzeln angesehen, wenn nötig eine Ausnahme erstellt, alle Logeinträge dieses spezifischen Problems entfernt, nächten Report angesehen. So lange, bis die Report-Log wieder leer war.
Anschließend die neue CSP wieder einkommentieren und wieder dreistellige Reports sammeln.
Diesmal dauert es länger und es kommen kleinere oder speziellere Probleme zum Vorschein: Von externen Seiten eingebundene Bilder oder Medien, alte http:// embeds von z.B. alten Google Maps Projekten, extern genutzte Services, Einbindungen von Inhalten noch über meine alte Domain hannes-schurig.de, externe Inhalte in Kommentaren usw.
Ich habe hier durchaus 2-3 Stunden verbracht, alte Blogartikel zu bearbeiten, Links zu korrigieren, meine alte Domain überall zu ersetzen, Kommentare zu korrigieren und mehr.
Nach 4-5 Iterationen über 3 Tage ist meine CSP nun ganz gut und die letzten 24 Stunden ergaben nur noch Reports, die geblockt werden können. Es verbleiben Logs von geblockten Domains wie countmake.cool, loadsource.org und eluxer.net – fragt mich nicht, was das ist. Manche Blocks kommen durch data, blob oder chrome-extension, ich denke das ist auch okay zu ignorieren.

Mit dieser Endfassung bin ich nun also ganz zufrieden und werde diese nun endgültig aktivieren:

<IfModule mod_headers.c> 
  Header always set Content-Security-Policy-Report-Only: "default-src 'self'; \
script-src 'self' 'unsafe-inline' 'unsafe-eval' www.google-analytics.com https://*.googleapis.com https://www.google.com https://www.gstatic.com https://*.vgwort.de https://*.it-stack.de; \
img-src 'self' https://*.gravatar.com https://*.w.org https://*.wordpress.org www.google-analytics.com https://*.vgwort.de https://www.gstatic.com https://*.it-stack.de data:; \
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://*.it-stack.de https:; \
font-src 'self' data: https:; object-src 'none'; \
child-src 'self' https://www.google.com https://*.youtube.com https://*.it-stack.de https:; \
frame-src 'self' https://www.google.com https://*.youtube.com https://*.it-stack.de https:; \
worker-src 'self' https://www.google.com https://*.youtube.com https://*.it-stack.de https; \
connect-src 'self' wss://it-stack.de www.google-analytics.com https://*.vgwort.de; \
report-uri https://report.tld/report.php"
</IfModule>

Die Backslashes am Ende der Zeilen ermöglichen Zeilenumbrüche in .htaccess Dateien zur besseren Lesbarkeit.

3.2 Verstehen

Ein paar kleinere Hinweise oder Ergänzungen dazu:

default-src ’self‘ wird angewendet, wenn eine andere Direktive, die für eine Anfrage gebraucht wird, gar nicht vergeben wurde. Ist eine Direktive gesetzt, wird default-src komplett überschrieben, dortige Werte werden nicht vererbt. Beispiel: img-src abc.com würde das ’self‘ von default-src nicht vererben, ’self‘ sollte daher fast immer mit angegeben sein.

Mir ist klar, dass unsafe-inline/-eval die größte Schwachstelle der CSP sind, allerdings auch das größte Problem bei WordPress Blogs mit etlichen Plugins, Google Analytics und mehr. Der Aufwand, diese zwei Attribute zu entfernen, kann sehr aufwändig und langwierig werden. Ich betrachte diese CSP jetzt vorerst als (wenn auch schon fortgeschrittenes) MVP – minimum viable product 😉

CSS-Stylesheets wirken eher harmlos, enthalten schließlich nur kosmetische Informationen, wieso einschränken? Es ist nicht zu unterschätzen, wieviel Spionage auch durch CSS-Angriffe wie z.B. „CSS Exfil“ möglich ist.

Ebenso Fonts, ist das nicht etwas too much? Nein, auch Fonts können zu Keyloggern umfunktioniert und müssen daher ebenso gut eingeschränkt werden.

child-src ist noch CSP Version 2 und wird angeblich (laut dieses Validators) in Version 3 durch frame-src und worker-src ersetzt. Ich habe also vorsichtshalber einfach mal alle drei Direktiven so gesetzt. Parallel am besten immer noch mit Google’s Validator testen.

4. Aktivieren

Nachdem die CSP nun definiert und einige Stunden ohne neue benötigte Regel im Testbetrieb lief, kann sie nun aktiviert werden. Dazu einfach nur Content-Security-Policy-Report-Only in Content-Security-Policy umschreiben und fertig. Beobachtet selber noch einmal die Webseite, auch das Admin Backend und wenn alles funktioniert, ist es geschafft!

Ich werde vorerst die Log noch im Blick behalten, bin aber erstmal froh, auch diesen Punkt soweit erledigt zu haben:

Es wird langsam… 3 Security Header gesetzt, CSP ist neu

mehr-website-sicherheit-mit-http-header-hsts-xss-protection-banner

Zum Start dieser kleinen Serie, inspiriert durch einen Sicherheitsreport meines Blogs von enginsight.com (dazu mehr im November), erst einmal die Grundlagen der HTTP-Header:

Was sind HTTP-Header und wofür brauche ich sie?

HTTP-Header, oder in diesem Artikel vor allem die HTTP-Header-Respond-Felder, sind ein Teil der Antwort eines Webservers an den anfragenden Client (mehr dazu). Sie enthalten Anweisungen, Informationen und Einschränkungen der Verbindung zwischen Browser und Server, aufgebaut als eine Vielzahl an Schlüssel-Wert-Paaren.
Der Betreiber einer Webseite oder eines Webservers kann diese Antwortfelder teilweise konfigurieren und damit die Sicherheit der Webseite und des Verbindungsaufbaus erhöhen. Die Felder, die speziell für mehr Sicherheit entwickelt wurden, werden auch kurz HTTP-Security-Header genannt.

Die Anpassung der Header kann unterschiedlich erfolgen und ist vom Webserver oder der Webhosting Umgebung abhängig. Webserver bieten für HTTP gewöhnlich Konfigurationsdateien an, teilweise gibt es diesen Zugriff auch in root-Webhosting-Lösungen. Für „normales“ Webhosting geht das größtenteils auch über eine .htaccess in der obersten Ebene. Das könnte im Falle meines Webhosters All-Inklusive beispielsweise sein:
/www/htdocs/w00bxxxx/.htaccess

Mögliche Probleme mit .htaccess bei Shared Webhosting

Achtung: Eventuell werden Header Anpassungen von eurem Hoster geblockt/entfernt. Das liegt dann an der Art und Weise der Webserver-Konfiguration.
Sidestory: Bei meinem Hoster All-Inklusive, dessen Shared Hosting Server größtenteils PHP über FPM/FastCGI realisieren, ist das beispielsweise der Fall. Hier müssten die Einstellungen direkt im VHost gesetzt werden, das kann nur der Hoster selbst. Freundlicherweise hat mich All-Inkl nach einer Nachfrage auf eine moderne Serverfarm umgezogen, wo ich mittels .htaccess auch Header setzen kann.
Sollte das für euch nicht möglich sein, funktioniert für WordPress auch der Workaround über die functions.php, den ihr auf dieser Seite ganz unten im letzten Absatz findet. 
Teilweise kann es auch sein, dass die Einträge durch Einstellungen im Admin-Backend überschrieben werden. So kann es sein, dass HSTS, „Enforce SSL“ und ähnliche Domain-basierte Eigenschaften in der Domänenverwaltung angepasst werden und die .htaccess Angaben überschreiben.

Hier die Analyse meines Blogs von securityheaders.com vor der Optimierung der Security Header:

mehr-website-sicherheit-mit-http-header-hsts-xss-protection-header-analyse-davor
Security Header Analyse vorher mit der Endwertung D, nicht so vorteilhaft…

Kein sehr gutes Bild. Wird Zeit, daran zu arbeiten! Wir beginnen mit zwei recht unkomplizierten Security Feldern, HSTS und XSS-Protection. Sie bieten einen guten Einstieg in das Themengebiet und benötigen jeweils nur 1 Zeile in der .htaccess. Aber nun in die Details:

HTTP Strict Transport Security – SSL & HTTPS, bis dass der Tod uns scheidet

HSTS (HTTP Strict Transport Security) sollte ausschließlich aber unbedingt dann konfiguriert werden, wenn die Webseite SSL verschlüsselt (über https) erreichbar ist und nicht mehr über unverschlüsseltes HTTP erreichbar sein soll. HSTS gibt vor, dass und für welchen Zeitraum in der Zukunft alle Anfragen über SSL vom Client zum Server geschickt werden müssen.

<IfModule mod_headers.c>
  # Die einfache HSTS Variante, halbes Jahr Zeitfenster
  # Header always set Strict-Transport-Security "max-age=15778463"
  # oder noch sicherer mit Subdomains, preload und allen Subdomains
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>

Zwei Werte sind hier wichtig: max-age und der optionale Parameter includeSubDomains. max-age ist die Zeitangabe in Sekunden, wie lange der Zugriff in Zukunft für diesen gerade aufrufenden Client ausschließlich über SSL erfolgen muss. Der Wert 31536000 steht demnach für 1 Jahr. Ist die Webseite innerhalb dieser Zeit nicht über https erreichbar, weil beispielsweise das Zertifikat abgelaufen ist, kann sie nicht mehr geöffnet werden. Browser geben dann diese Art von Fehlermeldung und für den Nutzer ist hier Endstation. Das kann jetzt für den Nutzer doof sein, sorgt aber für ein hohes Sicherheitsminimum, das nicht unterschritten werden darf. Eigentlich ein Plus.

Ein Blick in die weiteren Eigenschaften von HSTS lohnt sich

Die zusätzliche Angabe includeSubDomains erweitert dieses Verfahren auf alle Subdomains, ein Wildcard-Zertifikat ist hier also von Nöten. 
Zu guter Letzt gibt es noch die preload-Eigenschaft, die noch nicht Teil des offiziellen Standards ist. Es ist die Crème de la Crème der HSTS-Absicherung und implementiert den HSTS-Schutz für eure Domain explizit und direkt in alle modernen Browser (akt: Chr, FF, Opr, Saf, IE11, Edg). Dafür muss die Seite jedoch HSTS ordentlich eingebunden haben und auf dieser Seite registriert werden. Dieser Artikel beschreibt sehr ausführlich und einfach dieses Attribut und all seine Details.
Prüft die HSTS-Eigenschaften eurer Seite beispielsweise hier. Mehr Informationen zu HSTS auch hier. Einen ausführlichen Check eurer SSL-Servereigenschaften könnt ihr hier initiieren – das dauert 2, 3 Minuten, ist aber sehr ausführlich und informativ.

X-XSS-Protection – steckt mehr drin als gedacht

Als nächste Eigenschaft schauen wir auf das Feld X-XSS-Protection. Dieses steuert Browser-Features, welche XSS-Attacken erkennen und verhindern. Diese Mechanismen sind normalerweise aktiviert, können aber von Servern oder vom Nutzer deaktiviert werden; X-XSS-Protection erzwingt die Nutzung dann entsprechend der Angabe. Oft lese ich, dass der Header nur von IE und Chrome, teilweise auch von Safari ausgewertet wird. Laut MDN wird der Header jedoch von allen Browsern bis auf Firefox unterstützt. Folgende Umsetzung via .htaccess:

<IfModule mod_headers.c> 
  # Schutz aktivieren und Rendern verhindern bei einem Angriff
  # Header always set X-XSS-Protection "1; mode=block" 
  # oder noch besser: Seite aufräumen, rendern und Angriff melden:
  Header always set X-XSS-Protection "1; report=http://reportingserver.com/reporting_URI.php
</IfModule>

Relativ einfach: Der erste Wert 1 erzwingt-aktiviert den Schutz, mode=block stoppt das Rendering der Seite und blockiert sie komplett. Ohne mode=block wird die Anfrage gereinigt und dann ausgeführt. Soweit so einfach.

XSS-Protection Reporting – Mitlesen der Angriffe

Nun kommt jedoch noch eine spannendere Anweisung, die leider auf kaum einer Infoseite beschrieben wird; vermutlich, weil es etwas mehr Text brauch. Denn die report-Anweisung ermöglicht die Angabe einer Reporting-URI, an die ein Bericht des Angriffs geschickt wird. Das dortige Skript kann nun beispielsweise loggen, benachrichtigen oder beliebig anders reagieren. Das finde ich besonders wert- und sinnvoll, daher hier noch der Aufbau:
Beginnen wir mit dem beispielhaften Aufbau eines XSS-Protection Report Requests, welcher mittels POST an die URI geschickt wird:

POST http://test.local/foo HTTP/1.1
Host: test.local
Connection: keep-alive
Content-Length: 116
Pragma: no-cache
Cache-Control: no-cache
Origin: http://test.local
X-FirePHP-Version: 0.0.6
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36
Content-Type: application/json
Accept: */*
DNT: 1
Referer: http://test.local/test.php?foo=%3Cscript%3Ealert(1);%3C/script%3E
Accept-Encoding: gzip, deflate
Accept-Language: cs,en-US;q=0.8,en;q=0.6

{"xss-report":{"request-url":"http://test.local/test.php?foo=%3Cscript%3Ealert(1);%3C/script%3E","request-body":""}}

Nun wird der Request gegen ein PHP-Skript geschickt und dort empfangen, in eine Datei geloggt und per Mail an den Admin geschickt. Dazu habe ich diesen MDN-Code etwas erweitert: Es gibt jetzt mehr Mailing-Optionen und die Möglichkeit, eine E-Mail bei jedem Angriff zu senden, statt nur beim ersten:

<?php
// Start configure
$log_file = dirname(__FILE__) . '/xss-report.log';
$log_file_size_limit = 10000000; // in bytes = 10MB - once exceeded no further entries are added
$email_every_attack = true;
$email_sender = 'phpmailer@mysite.de';
$email_recipient = 'admin@mysite.de';
$email_subject = 'XSS Violation';
$email_charset = 'utf-8';
// End configuration

$current_domain = preg_replace('/www\./i', '', $_SERVER['SERVER_NAME']);
$email_subject = $email_subject . ' on ' . $current_domain;
http_response_code(204); // HTTP 204 No Content
$json_data = file_get_contents('php://input');

// We pretty print the JSON before adding it to the log file
if ($json_data = json_decode($json_data)) {
  $json_data = json_encode($json_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
  if ($email_every_attack) {
    // Send an email
    $message = "XSS violation on " . $current_domain . ":\n\n" .
      $json_data . "\n\n" .
      "Logfile:" . $log_file;
    $headers =  "From: ".$email_sender."\r\n".
                "Content-Type: text/plain;charset=".$email_charset;
    mail($email_recipient, $email_subject, $message, $headers);
  } else if (filesize($log_file) > $log_file_size_limit) {
    exit(0);
  }
  file_put_contents($log_file, $json_data."\n", FILE_APPEND | LOCK_EX);
}
?>

Am besten testet ihr die Reporting-Funktion vorher, beispielsweise über einen online API-Tester. Baut euch einfach den Request zusammen und schickt ihn an eure Report-URI. Das funktioniert gut und dient mir nun als Informationsquelle, welche XSS-Angriffsversuche mit exakt welchen Anfragen gegen meine Seite gefahren werden. Hier nochmal das Setup visuell:

mehr-website-sicherheit-mit-http-header-hsts-xss-protection-report-setup_thumb
XSS-Protection Reporting Setup mit Logging und Mailing

Es sei erwähnt, dass die X-XSS-Protection durch die neuere und komplexere Content Security Policy (CSP) ersetzt wird. Das schauen wir uns im nächsten Artikel genauer an. Solange dieses Feld aber noch nicht komplett von allen Browsern unterstützt wird, empfiehlt es sich weiterhin, XSS-Protection zu verbauen (zumal es so einfach ist).

Abschluss der ersten Optimierung

Die ersten zwei Security Header sind damit optimiert, ein erster Schritt:

Bei Kinder- bzw. Jugendschutzprogrammen ist es eine sehr wichtige Funktion: Das Starten einzelner Programme verhindern oder nur bestimmte Programme zulassen und alle anderen blockieren. Das lässt sich händisch jedoch auch ohne eingekaufte Zusatzsoftware in wenigen Minuten einrichten:

Mit der Registry nur bestimmte Programme zulassen

Sucht in der Registry nach dem Schlüssel:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies

Ihr erstellt nun einen Schlüssel „Explorer“ unter „Policies“ und einen DWORD-Wert „RestrictRun“ mit Wert „1“. In „Explorer“ erstellt ihr dann noch einen neuen Schlüssel „RestrictRun“ und könnt hier nun beliebig viele Zeichenfolgen erstellen. Jede Zeichenfolge steht für ein erlaubtes Programm. Alle Programme, die hier jetzt nicht gelistet sind, dürfen auch nicht mehr gestartet werden*. 
Der Name der Zeichenfolge ist eine fortlaufende Nummerierung und als Wert wird der Dateiname des Programms gesetzt. Die Änderungen werden beim Ab- und wieder Anmelden bzw. Neustart für den Nutzer aktiv. 

Einstellungen unter HKEY_CURRENT_USER gelten nur für den gerade angemeldeten Nutzer. Daher muss der Vorgang für jeden Nutzer, der eingeschränkt werden soll, innerhalb dessen Anmeldung gemacht werden. Oder ein Admin setzt die Einstellungen via HKEY_USERS, mehr dazu im letzten Abschnitt. 

Zum Testen empfehle ich, regedit.exe mit einzutragen. Somit könnt ihr auch in dem eingeschränkten Benutzer die Einstellungen noch via regedit.exe anpassen. Für den finalen Einsatz sollte regedit.exe unbedingt nicht erlaubt sein (also nicht auf der Liste stehen), weil der Nutzer sonst die Einstellung aushebeln könnte.

*RestrictRun blockiert nur Programmstarts über den Nutzerkontext des eingeschränkten Nutzers. Heißt: Systemkomponenten, Dienste oder Programme, die über einen anderen Nutzerkontext geladen werden, wie die CMD oder der Taskmanager, werden nicht blockiert. Das ist ganz gut, damit Treiber, Sicherheitsprogramme und andere kritische Windows-Komponenten weiterhin funktionieren. Prüft vorher das eingeschränkte Konto auf die gewünschten Einschränkungen.

Woher bekomme ich die Dateinamen meiner Programme?

Das ist relativ einfach, zwei Wege kurz beschrieben:

  1. Rechtsklick auf jede Verknüpfung, beispielsweise auf dem Desktop oder im Startmenü -> Eigenschaften und dort steht am Ende von „Ziel“ die ausführende Datei.
  2. Während das Programm geöffnet ist im Tastkmanager Rechtsklick darauf -> Eigenschaften und dann steht der Dateiname neben dem Programmicon. Eventuell müsst ihr den Programmlistenpunkt aufklappen und die Dateinamen der Unterpunkte somit auslesen, sollten es mehrere sein.

Via Registry bestimmte Programme blockieren

Das Blockieren einzelner Programme funktioniert nun fast genauso. In „Explorer“ wird nun ein Schlüssel und ein DWORD-Wert namens „DisallowRun“ erstellt. Im Schlüssel dient wieder eine Liste von Zeichenfolgen für die Aufzählung von Programmen bzw. deren ausführbaren Dateien. Die in der Liste eingetragenen Programme dürfen nicht mehr gestartet werden, alle anderen sind noch erlaubt.

  1. regedit.exe, SystemSettings.exe, SystemPropertiesAdvanced.exe, mmc.exe und weitere Systemtools solltet ihr vielleicht sperren. Vor allem, wenn ihr dem eingeschränkten Nutzer zutraut, euren Schutz umgehen zu wollen.
  2. Die Einstellungen setzt ihr beim ersten Login noch über die regedit.exe, ab dem zweiten Login werden Änderungen dann aber via Adminkonto gesetzt, da ja regedit.exe nicht mehr zugelassen sein sollte. Siehe letztes Kapitel.

Administration der Einstellungen außerhalb des eingeschränkten Nutzers

Ist ein Nutzer erst einmal eingeschränkt, wird die Administration schwierig. Wenn nur bestimmte Programme zugelassen sind, regedit.exe jedoch nicht, lässt sich nicht so einfach etwas ändern.
Hier empfiehlt es sich, die Einstellungen vor dem Login dieses Nutzers durch einen anderen Nutzer (mit Administrationsrechten) anzupassen.

Die benutzerspezifischen Inhalte des HKEY_CURRENT_USER können auch über einen anderen Nutzer via HKEY_USERS/[SID] eingesehen und geändert werden. Die SID des gewünschten Nutzers kann über die CMD ausgelesen werden:

REM// aktuell angemeldeter Nutzer:
C:\Users\Hannes>wmic useraccount where name='%username%' get sid
REM// SID
REM// S-1-5-21-3483483838-1959189235-3432330904-1001

REM// beliebiger Nutzername
C:\Users\Hannes>wmic useraccount where name='Hannes' get sid
REM// SID
REM// S-1-5-21-3483483838-1959189235-3432330904-1001

Mit dieser SID könnt ihr dann aus jedem Adminaccount heraus die Registry und den RestrictRun / DisallowRun Eintrag des Nutzers anpassen. Einfach die gewünschten Programme eintragen, als Nutzer anmelden, diese nutzen. So lassen sich die Einstellungen übrigens auch in Masse aus einem Account heraus einstellen und der Prozess auch einfach per Skript automatisieren und auf beliebig viele Nutzer ausrollen.

windows-restrictrun-start-whitelist-einrichten-sid-hkey-users
Über die CMD die SID eines Nutzers auslesen und seine Registry anpassen

beliebig-viele-pdf-dateien-auf-einmal-drucken-unsplash-teaser

Das Drucken vieler Dokumente auf einmal klingt simpel, hat im Detail jedoch kleine Tücken. Windows bietet bei mehreren markierte Dateien im Kontextmenü „Drucken“ an, jedoch Vorsicht: Je nach Dateityp und Anzahl der Dateien steht diese Option vielleicht nicht zur Verfügung.

Empfehlung: Software mit vielen Features

Ich war selber überrascht, wie anstrengend es ist, nur mit Windows Boardmitteln viele Dateien auf einmal zu drucken. Fazit: Maximal 15 Dateien eines Dateityp desselben Ordners … sehr limitierte Möglichkeiten. Am besten greift man hier zu Software, mit der das kein Problem mehr ist. Wer das nicht möchte oder keine Installationsrechte hat, kann die folgenden Überschriften für die manuellen Vorgehensweisen lesen.

Ich empfehle an dieser Stelle die Freeware Print Conductor. Diese hat eine besonders einfache Oberfläche, unterstützt über 75 Dateiformate und druckt mit nur 3 Klicks alle gewünschten Dateien aus. Das Tool kann jedoch noch viel mehr: Import/Export von Drucklisten, Druckeinstellungen für jedes Dokument unterschiedlich, Druckeinstellungen in einer .ini Datei und somit übertragbar, Deckblätter, Schätzen der Seitenanzahl, Druck-Berichte – hier bleiben keine Wünsche offen.

beliebig-viele-dokumente-auf-einmal-drucken-print-conductor-freeware
Freeware Print Conductor druckt einfach viele Dokumente auf einmal

Müsst ihr das Drucken von Dokumenten im sehr großen Stil fahren oder gar komplex automatisieren? Dann hilft vielleicht auch 2Printer, ein Kommandozeilentool mit ähnlichen Möglichkeiten. Zwei weitere Artikel meines Blogs zum Thema Drucker in Kommandozeilen hier.

Wie es komplett ohne Helfertools geht? Im Folgenden erläutert für PDF, Word, Excel und Bilder.

Manuell: Mehrere PDFs drucken

Bei PDF-Dokumenten werden alle markierten Dateien auf dem Standarddrucker mit den Standardeinstellungen gedruckt. Weitere Druck-Dialoge oder Druck-Anpassungen vorher sind nicht möglich, der Druck erfolgt sofort. Zusätzlich funktioniert das nur bis maximal 15 selektierten PDFs in einem Ordner, ab 16 markierten Dateien verschindet die Option. Beide Probleme lassen sich aber mit derselben Methode umgehen.

beliebig-viele-pdf-dateien-auf-einmal-drucken-pdf-explorer
Explorer Rechtsklick-Kontextmenü bei 15 und 16 markierten PDFs

Lösung bei PDFs: Hier hilft nur das Zusammenfügen aller Dokumente zu einer einzigen PDF, um diese dann zu drucken. Somit lassen sich beliebig viele PDFs auf einmal mit der Möglichkeit der Druck-Anpassung vorher drucken. Das ist glücklicherweise mit Tools wie der Freeware PDFsam Basic sehr einfach zu bewerkstelligen. So geht es: Einfach im „Zusammenführen“ Modus alle gewünschten PDFs in das Fenster ziehen, Zielordner wählen, „Start“ drücken und fertig. Noch einfacher: Dateien markieren -> Rechtsklick -> Senden an -> PDFsam Basic -> Zusammenführen.

mehrere-beliebig-viele-pdf-dokumente-auf-einmal-drucken-pdfsam
PDFs zusammenführen mit PDFsam

Andere Dateitypen drucken

Bei Office-Dokumenten verhält es sich ähnlich: Bis zu 15 Dokumente desselben Dateityps (z.B. xlsx) im selben Ordner lassen sich über das Kontextmenü jeweils drucken, ab 16 verschwindet die Option. Hier müssen die Dateien wieder kombiniert werden, in Word über Einfügen -> Objekt -> Text von Datei. Excel kann manuell über Daten -> Daten abrufen -> Aus Datei mehrere Dokumente z.B. in seperate Tabellenblätter laden, alternativ gibt es Makros und Skripts für das automatische Mergen vielen Excel-Dateien. Wirklich nutzerfreundlich ist das alles nicht, aber letztlich funktioniert es.

Einfacher ist es dagegen bei Bilddateien unterschiedlicher Dateitypen. Diese können über das Kontextmenü gedruckt werden, selbst wenn mehr als 15 Dateien unterschiedlicher Bildformate ausgewählt wurden. Außerdem erscheint vor dem Druck ein eigener Dialog, der es ermöglicht, Druckeinstellungen anzupassen und z.B. Collagen zu drucken:

mehrere-beliebig-viele-pdf-dokumente-auf-einmal-drucken-bilder
Mehrere Bilddateien drucken mit „Windows Bilder drucken“

Fazit bleibt: Hier könnte Windows unbedingt nachbessern und einen umfangreicheren Druckservice anbieten, unabhängig von Anzahl, Typ und Ort der Datei sowie unabhängig von der Art der Ausgabe (Drucken, „To PDF“ usw.). Bis dahin sind Softwares wie Print Conductor schon die beste Möglichkeit für größere Druckvolumen.

GMail Speicherplatz

GMail (bzw. „Google Mail“) war bereits mit dem Start der Beta Phase 2004 die Top 1 im E-Mail Speicherplatz, als GMX, web.de & Co gerade mal noch wenige Megabyte zur Verfügung stellten. GMail erhöhte den Speicherplatz in kleinen Schritten immer weiter bis 15GB im Jahre 2013 und war damit immer unangefochtener Spitzenreiter. (via) Seit 2013 gibt es jedoch keine Speicherupgrades mehr, außer durch spezielle Aktionen. Beispielsweise hat Google damals seinen neuen Sicherheitscheck (mehr zum Thema Google Sicherheit hier) angepriesen und 2GB mehr Speicherplatz für alle Anwender des Checks verteilt. Nur dank dieser Aktion bin ich noch nicht an mein Speicherlimit gelangt.

gmail-mails-aelter-als-x-tage-automatisch-loeschen-labels-speicherplatz-knapp

Nichtsdestotrotz ist es irgendwann mal soweit: Der Speicherplatz wird knapp! Sinnvoll ist es, an der Stelle anzupacken, die den größten Anteil des Speicherplatzverbrauches verursacht. Das werden die Mails mit Anhängen sein. Ausmisten befreit hier schnell einige hundert Megabyte.

Für diese Aufgabe wird das Google Sheets Addon „Save Email and Attachments“ benutzt. Das Addon kann nicht nur Anhänge und Mails herunterladen, es kann mit Hilfe von Regeln flexibel angepasst werden und die Downloads werden direkt in einen Google Drive Ordner kopiert. Anschließend lassen sich die Anhänge aus diesem Ordner einfach herunterladen und die entsprechenden Mails löschen.

Mail Anhänge aufräumen

Im ersten Schritt wird das Addon autorisiert und dann geht es auch schon los, die Regel für den Download wird definiert. Welches Label, Von, An, Betreff, Datum und ähnliche Angaben schränken die Auswahl der Mails ein. Mit der Option „Save email body“ wird jede E-Mail, die auf die Suchkriterien der Mail zutrifft, als PDF heruntergeladen. Hübsch ist diese PDF-Ansicht nicht, nutzt lieber MailStore Home oder andere Tools für einfache Mailbackups. Wichtiger dagegen die Option „Save file attachments“ – hiermit werden E-Mail-Anhänge heruntergeladen. Ohne die „email body“ Option werden hier also wirklich nur Anhänge geladen, keine Mails dazu. Am Ende wird noch der Google Drive Zielordner bestimmt – wenn ihr hier einen neuen Ordner benutzen wollt, müsst ihr den vorher über Drive händisch erstellen und dann dort auswählen.

gmail-mails-anhaenge-attachments-download-regel-anlegen

Erstellte Regeln werden stündlich automatisch im Hintergrund ausgeführt. Das Addon kann also auch als eine Art Anhang-Backup benutzt werden. Alternativ lässt sich die Regel auch direkt manuell ausführen, was zum einmaligen Aufräumen sinnvoller sein mag. Die Mails werden verarbeitet, die Anhänge zu Drive transferiert und der Fortschritt in einer Tabelle visuell festgehalten:

gmail-mails-anhaenge-attachments-download-tabelle

Die letzten zwei Schritte sind abhängig davon, ob ihr Speicherplatz freiräumen wollt. Da der Speicherplatzverbrauch von GMail und GDrive zusammengerechnet werden, müsst ihr die Anhänge aus Drive herunterladen UND die Mails mit diesen Anhängen löschen, damit der Speicherplatz final in GMail frei wird. 

Anhänge aufräumen ist eine der Möglichkeiten, den GMail Speicherplatz wieder zu befreien. Im nächsten Artikel gehe ich auf das automatische Bereinigen alter Mails ein.

Wow, Whatsapp!

whatsapp-tipps-und-tricks-fuer-fortgeschrittene-bannerWhatsapp ist zu einem großen Teil unserer Kommunikation geworden. Anfang 2018 haben über 1,5 Milliarden Nutzer täglich über 60 Milliarden Whatsapp Nachrichten verschickt. 60… Milliarden… täglich!
Da kann es nicht schaden, diesen Dienst gut zu beherrschen und ein paar Tipps und Tricks zu kennen.
Ergänzend zu meinem Artikel über Whatsapp Backups, nachfolgend einige allgemeine, fortgeschrittene Tipps, die über das Textnachrichten schreiben hinausgehen. Hinweis: Die Pfade und Schritte kommen aus Android, unter iOS können diese abweichen.

Inhaltsverzeichnis:

  1. Eigene GIFs erstellen/verschicken
  2. Voice Nachrichten aufnehmen ohne Button gedrückt zu halten
  3. Bilder verlustfrei/ohne Komprimierung schicken
  4. Bilder in der Galerie verstecken/nicht anzeigen
  5. Netzwerk- und Speichernutzung (ansehen und aufräumen)
  6. Netzwerknutzung einschränken
  7. Whatsapp Nachrichten (heimlich) lesen (keine blauen Haken)
  8. (Video-)Telefonieren über Whatsapp
  9. Whatsapp Telefonkonferenz
  10. Kontakte anpinnen und als Verknüpfung
  11. Individuelle Benachrichtigungstöne für Kontakte
  12. Einzelne Nachrichten speichern
  13. Broadcasts anstatt Gruppen
  14. Gruppenrechte ändern (z.B. Nachrichten-Senden verbieten)
  15. Standort teilen
  16. Telefonnummer ändern / Handywechsel
  17. Sicherheit: 2-Faktor-Verifizierung
  18. Datenschutzeinstellungen
  19. „Account Info“/Datenschutzbericht anfordern
  20. Wann genau wurde die Nachricht gelesen?
  21. Chats als ungelesen markieren
  22. Text formatieren
  23. Chats als Text per Mail exportieren
  24. Voice Nachrichten in Text umwandeln
  25. Whatsapp Web / PC-App
  26. Notizen bzw. „chatte mit Dir selbst“
  27. Alles über Backups & Wiederherstellung
  28. Fortsetzung folgt…

Weiterlesen