WordPress bietet eine Reihe von Informationen über das System:

XML-Seiten

finden sich Links auf spezielle XML-Seiten.

Recht gefährlich ist wohl die REST-API

Also, wenn ich eine Website angreifen möchte, dann würde ich doch im ersten Schritt gerne wissen, wie die Benutzer auf dem System heißen. Dann freue ich mich doch, wenn mir das System selber iese Informationen liefert http://<domain.de>/wp-json/wp/v2/users:

 

Hinweis: Die Informationen sind in dem Dateiformat json strukturiert . Firefox ist in der Lage, die Struktur zu nutzen, in Chromium-Browsern sieht die Information etwas unübersichtlicher aus.

[{"id":1,"name":"netthelp","url":"http:\/\/wordpress.netthelp.de","description":"","link":"http:\/\/wordpress.netthelp.de\/author\/netthelp\/","slug":"netthelp","avatar_urls":{"24":"http:\/\/0.gravatar.com\/avatar\/3f9d5473bdbd0ade2f77475a42dfaa05?s=24&d=mm&r=g","48":"http:\/\/0.gravatar.com\/avatar\/3f9d5473bdbd0ade2f77475a42dfaa05?s=48&d=mm&r=g","96":"http:\/\/0.gravatar.com\/avatar\/3f9d5473bdbd0ade2f77475a42dfaa05?s=96&d=mm&r=g"},"meta":[],"_links":{"self":[{"href":"http:\/\/wordpress.netthelp.de\/wp-json\/wp\/v2\/users\/1"}],"collection":[{"href":"http:\/\/wordpress.netthelp.de\/wp-json\/wp\/v2\/users"}]}}]

Es bietet sich also an hier den Firefox-Browser zu nutzen oder ein passendes Plugin von https://chromewebstore.google.com/search/json zu installieren.

Die Seite /wp-json/wp/v2/users/ ist übrigens nur eine von vielen Unterseiten, eine Übersicht bekommt man mit http://<domain.de>/wp-json/wp/v2/

Für diese Seite werde ich nur Screenshots von dem Netthelp WordPress darstellen, live können wir uns beliebige Seiten dazu anschauen.

Eine Übersicht über die API-funktionen kann man auf der Seite https://developer.wordpress.com/docs/api/ bekommen.

 

REST API deaktivieren

Es ist also wichtig, diese Funktionalität nach außen zu deaktivieren. Ganz deaktivieren kann man diese API nicht, dann würden viele Komponenten nicht mehr funktionieren, u.a. auch der Gutenberg Editor.
Im Web findet sich eine Reihe von Anleitungen für unterschiedlichst Wege zur Deaktivierung:

Auf https://seoagentur-hamburg.com/wordpress-rest-api-deaktivieren/ wird empfohlen eine kleine Erweiterung der functions.php vorzunehmen:

<?php
/* Ab hier kopieren */
/**
* REST-API fuer extere User abschalten
*/
add_filter('rest_authentication_errors', function($result) {
if ( ! is_user_logged_in() ) {
return new WP_Error( 'rest_API_cannot_access', array( 'status' => rest_authorization_required_code() ) );
}
return $result;
});

Auf diese Art bekommen nur angemeldete Nutzer Zugriff auf die API.

Auf https://www.netz-gaenger.de/blog/wordpress-tutorials/rest-api-in-wordpress-deaktivieren/ findet sich ein extremerer Vorschlag:

add_filter('rest_enabled', '_return_false');
add_filter('rest_jsonp_enabled', '_return_false');

Ich fürchte, dass damit auch intern die API deaktiviert ist.

Aber auf der Seite wird auch auf eine Lösung verwiesen, ähnlich der, die wir bei Netthelp nutzen, das Plugin https://wordpress.org/plugins/disable-json-api/

Bei Netthelp nutzen wir schon lange das Plugin https://wordpress.org/plugins/disable-wp-rest-api/

Seit mindestens 2004 bin ichg zufriedener Nutzer von der Banking-Software Matrica Moneyplex. Etwa alle fünf Jahre hatte ich Kontakt mit dem Support, immer dann wenn die Haspa mal wieder etwas an ihrer Homebanking-Schnittstelle verändert hat. Bisher war der Support immer sehr schnell und sehr hilfreich.

Aktuell im July 2024 (also 20 Jahre Nutzer) gab es wieder ein Problem bei der Haspa. Ich konnte keine Konto-Daten abfragen und bekam die folgende Fehlermeldung:

 

 

 

 

 

 

 

 

Auf der supportseite von Matrica fand ich den Hinweis von Mai 2024,  dass die Sparkassen ihr pushTan Verfahren von Version 1.0 auf 2.0 aktualisieren. Ich habe das erst einmal als Erklärung genommen, mich aber gewundert, dass die Aktualisierung von Moneyplex, die für Mitte Juni angekündigt war, noch nicht vorhanden ist.

Außerdem hat mich gewundert, dass ich ja für die Abfrage der Kontodaten normalerweise keine TAN benötige. Daher habe ich eine Anfrage an den Support von Matrica gestellt. Da nichts passierte, nicht einmal eine automatische Eingangsmeldung, habe ich eine Woche später noch einmal geschrieben, wieder ohne Ergebnis.

Zum Glück habe ich dann von einem Nachbar gehört, dass er das gleich Problem hatte und er nur das Konto resynchronisieren musste.

Lösungsweg

Also hier die Lösung für das Problem, die nichts mit der Änderung des TAN-Verfahrens zu tun hat, sondern nur damit, dass die Haspa wohl wie bei Banking im Browser einemal das Gerät als vertrauenswürdig eingestuft haben möchte.

  • In Moneyplex ganz normal anmelden
  • Im Menü auf Stammdaten -> Bankzugänge klicken
  • Mit der rechten Maustase auf das gewünschte konto klicken -> Resynchronisation des Bankzugangs
  • der folgende Dialog ist etwas erschreckend, man muss dort unter JA eintippen und dann auf OK

 

 

 

 

 

 

 

  • Danach wird dann eine Verbindung zur Haspa aufgebaut. Die Dialoge waren etwas unübersichtlich und überlappend. Am Ende wurde ein Zugriff auf den Kartenleser benötigt, um eine TAN zu erzeugen.
  • Nach einem Neustart der Software war wieder alles in Ordnung.

Es kann sein, dass diese Resynchronisation jetzt abei jedem Rechnerwechsel und jedem Update der Software notwendig wird.

 

Unter:

https://www.kaspersky.com/downloads/free-virus-removal-tool

stellt Kaspersky aktuell eine Software zur Verfügung, die auf Linux-Systemen nach Schadsoftware suchen kann (siehe auch den Beitrag bei Heise: https://www.heise.de/news/Kaspersky-Virus-Removal-Tool-fuer-Linux-liefert-erste-Einschaetzung-9755128.html ).

Das Tool wird auf den jeweiligen Rechner nur herunter geladen und erfordert keine weitere Installation, es muss nur ausführbar gemacht werden:

chmod a+x  kvrt.run

Es braucht in der Regel Root-Rechte, die notfalls auch nach dem Start angefordert werden. In den üblichen Beschreibungen ist vor allem die GUI-Nutzung zu finden. Das Tool bietet aber auch die Möglichkeit rein von der Kommando-Zeile aus zu laufen.

Dazu kann man auf die Hilfe zugreifen:

Mit

./kvrt.run --help

bekommt man Hilfe zum Entpacker des Tools.

Makeself version 2.5.0
1) Getting help or info about kvrt.run :
kvrt.run --help Print this message
kvrt.run --check Checks integrity of the archive
kvrt.run --verify-sig key Verify signature agains a provided key id

2) Running kvrt.run :
kvrt.run [options] [--] [additional arguments to product]
with following options (in that order)
--allowuser Do not try to get root privileges
--noexec Do not run product
--noprogress Do not show the progress during the decompression
--target dir Extract directly to a target directory (ONLY absolute path)
This directory must not exist (delete it before extracting).
-- Following arguments will be passed to the product

Hilfe zum eigentliche Removal Tool bekommt man über

./kvrt.run -- -h

liefert dann (eventuell in einem GUI-Fenster):

-h show help
-d <folder_path> path to quarantine and reports folder
-accepteula accept EULA, Privacy Policy and KSN Statement
-trace enable trace collection
-tracelevel <level> set the level of traces: 
ERR - only error messages
WRN - warnings and errors
INF - information, warnings and errors
DBG - all messages
-processlevel <level> set the level of danger of object which will be neutralized:
0 - skip objects with high, medium and low danger level
1 - neutralize objects with high danger level
2 - neutralize objects with high and medium danger level
3 - neutralize objects with high, medium and low danger level
-dontencrypt disable encryption of trace files/reports/dump files
-details enable detailed reports
-proxyconfig <config_file_path> path to file with proxy config
-silent run scan without GUI
-adinsilent run active disinfection in silent mode
-allvolumes add all volumes to scan
-custom <folder_path> path to custom folder for scan
-customlist <file_path> path to file with custom folders for scan
-exclude <folder_path> exclude path from custom scan
-excludelist <file_path> path to file with excludes for custom scan
-customonly run scan of custom folders only

Wenn man den dortigen Hinweisen folgt, dann kann man mittels

./kvrt.run -- -silent -accepteula

das Tool starten.

Ergibt dann im Idealfall eine Ausgabe wie:

Running with root privileges
Generated directory is </tmp/bc7d85d8a6c0437b16834>
Verifying archive integrity... 100% SHA256 checksums are OK. All good.
Uncompressing Kaspersky Virus Removal Tool 24.0.4.0 for Linux 100% 
=================================
Running kvrt with args <-silent -accepteula>
=================================
compver: 24.0.4.0 x86-64 (Apr 12 2024 12:32:49)
Product folder </var/opt/KVRT2024_Data>
=================================
Scan is started
=================================
=================================
Scan is finished with results:
Processed: 37785
Processing errors: 0
Detected: 0
Password protected: 0
Corrupted: 0
=================================
=================================
kvrt exited with code <0>
=================================

Achtung: Bei Tools aus dem Hause Kaspersky sollte man immer auch die Hinweise des BSI im Hinterkopf haben.

Mir ist mal wieder ein Problem aufgefallen, welches mit Google und seinem Regulationanspruch zusammen hängt. Es ist nämlich so, dass manche WP-Systeme keine Mails an Google-Empfänger verschicken können. Man bekommt dann in der Logdateie eine Fehlermeldung wie:

<ein-user@gmail.com>: host gmail-smtp-in.l.google.com[142.251.175.26] said:
550-5.7.26 This mail is unauthenticated, which poses a security risk to the
550-5.7.26 sender and Gmail users, and has been blocked. The sender must
550-5.7.26 authenticate with at least one of SPF or DKIM. For this message,
550-5.7.26 DKIM checks did not pass and SPF check for
[h2412yxyz.stratoserver.ne 550-5.7.26 t] did not pass with ip:
[85.214.x.y]. The sender should visit 550-5.7.26
https://support.google.com/mail/answer/81126#authentication for 550 5.7.26
instructions on setting up authentication.
s24-20020a632158000000b0055acc7f8088si4258738pgm.301 - gsmtp (in reply to
end of DATA command)

Das hat schon eine gewisse Berechtigung, weil das WordPress-System hier keine sinnvolle Absenderadresse gesetzt hat, sondern www-data als Absender genommen hat. Das ergänzt das Mailsystem dann noch um den Servernamen. Damit schlagen dann die genannten Checks fehl.

Zur Beseitigung des Problems gibt es mehrere Möglichkeiten:

  1. Nutzung eines Plugins wie WP Mail SMTP/ 
  2. Anpassung der functions.php

Das vielgelobte Plugin hat mich genervet, weil es gleich eine Pro-Version anbietet. Ich habe also unter Design -> Theme-Datei-Editor die Datei functions.php (Theme-funktionen) um die folgenden Zeilen erweitert (einfach angehängt):

// Mail Hook mail_from
add_filter( 'wp_mail_from', function ( $original_email_address ) {
return 'testpress@meine-domain.de';
} );

// Mail Hook mail_from_name
add_filter( 'wp_mail_from_name', function ( $original_email_from ) {
return 'Testpress';
} );

//Action Hook phpmailer_init
add_action( 'phpmailer_init', 'my_phpmailer_init' );
function my_phpmailer_init( $phpmailer ) {
$phpmailer->Sender = $phpmailer->From;
}

Die beiden Mail-Hooks setzten die Absender-Adresse auf einen gewünschten Wert, wobei der Hook eigentlich eine funcion einbindet, die hier jeweils gleich integriert ist. In vielen Beschreibungen ist das auch getrennt (https://wordpress.org/support/topic/change-sender-name-and-email-address-wordpress/) .
Diese Einstellungen reichen aber nicht aus, weil damit die Adresse im Envelope (Umschlag) nicht geändert wird und das ist die entscheidende Stelle. Dafür gibt es einen Action-Hook, über den man die Initialisierung des Mailers vornehmen kann. Hier ändern wir nur den Wert für Sender und zwar auf den gerade davor gesetzten Wert von From.

Auch wenn innerhalb der WordPress Options, eventuelle durch eine Erweiterung,  eine Mailadresse gesetzt ist, wie z.B. wpmembers_email_wpfrom, so wird die erst durch die se Initialisierung aktiv.

Damit sollten jetzt auch Mails an z.B. Google-Adressen funktionieren, sofern der eingestellte Absender grundsätzlich entsprechende Mails verschicken kann.

Damit die Änderung nicht bei nächsten Update des Themes überschieben wird, sollte man ein Child-Theme anlegen, in dem diese Ergänzung realisiert wird.

Weitere Informationen:

https://developer.wordpress.org/reference/hooks/wp_mail_from/
https://developer.wordpress.org/reference/hooks/wp_mail_from_name/
https://developer.wordpress.org/reference/hooks/phpmailer_init/

 

In der letzten Zeit habe ich mich mit der flexibleren Installation von PHP beschäftigt (https://www.debacher.de/wiki/Verschiedene_PHP-Versionen_für_Apache). Dabei ist eine Auto-Vervollständigung für apt recht hilfreich. Auf aktuellen Ubuntu-Rechnern ist das für normale Nutzer aktiviert, aber nicht für root.

Ein paar Zeilen helfen hier weiter:

apt install bash-completion

Eventuell ist das Paket schon installiert. Auf alle Fälle muss man dann in der Datei /etc/bash.bashrc ein paar Kommentarzeichen entfernen (ab Zeile 34):

# enable bash completion in interactive shells
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

Wenn man sich jetzt erneut anmeldet, dann funktioniert die Vervollständigung.

WordPress hat hinsichtlich seiner Mails in paar Merkwürdigkeiten:

1. Absenderadresse

Bei ausgehenden Mails benutzt WordPress standardmäßig die Absenderadresse wordpress@<Domain>, hier im konkreten Fall also wordpresse@debacher.de . Falls man das ändern möchte, weil ein anderer Userteil oder eine andere Domain gewünscht wird, so kann man das nirgends direkt einstellen. Man muss ein paar Zeilen Code in die Datei functions.php mit aufnehmen:

add_filter('wp_mail_from', 'new_mail_from');
add_filter('wp_mail_from_name', 'new_mail_from_name');

function new_mail_from($old) {
 return 'no-reply@debacher.de';
}

function new_mail_from_name($old) {
 return 'Debacher.de';
}

Durch diese beiden Filter wird der Absender bei den ausgehenden Mails auf die gewünschten Einstellungen gesetzt.

 

2. Administrator-E-Mail-Adresse

Manchmal hat man mehrere Administratoren und möchten allen die entsprechenden Mails zukommen lassen. Im Backend ist es aber nicht möglich mehrere Mailadressen anzugeben, das geht nur direkt in der Datenbank.
Hier sucht man die Tabelle wp_optins aus (eventuell haben die Tabellen ein anderes Präfix) und dort den Eintrag admin_email

Dort kann man dann mehrere Mailadressen, durch ein Komma getrennt eingeben, also so, wie sie der Mailserver als Liste von Adressen akzeptiert.

Dieser Eintrag ist dann auch so im Backend zu sehen, kann dort aber nicht verändert werden, da in diesem Formular bei einer Eingabe eine gültige Mailadresse erzwungen wird.

Zurzeit bin ich dabei mit mehreren dieser kleinen Geräte Anwendungen zu realisieren. Dabei tauchen immer wieder Informationen auf, die ich nicht verlieren möchte. Dazu dient dieser Beitrag.

Raspis Temperatur

Der Raspi verfügt über einen eingebauten Temperatur-Sensor. Dieser Sensor lässt sich folgendermaßen abfragen:

cat /sys/class/thermal/thermal_zone0/temp

Dieser Aufruf liefert momentan konkret:

42345

Das ist als Temperatur von 42,3° zu interpretieren (einfach durch 1000 teilen).

Etwas direkter erhält man diese Temperatur mittels

vcgencmd measure_temp

Das liefert die Ausgabe

temp=42.3'C

 

In der letzten Zeit ist es nicht einfacher geworden PDF-Dokumente in einer Webseite darzustellen. Zwar beherrscht Firefox das problemlos, aber z.B. nicht die Android-Version. Auch auf verschiedenen Apfel-Geräten funktioniert das nicht von Haus aus.

Zum Glück gibt es das Projekt https://github.com/mozilla/pdf.js mit dessen Javascript die Einbindung auf sehr vielen Geräten identisch funktioniert. Ich habe mir die Software von https://mozilla.github.io/pdf.js/getting_started/ geladen und die ZIP-Datei in ein Verzeichnis /pdfjs entpackt.

Leider ist die Nutzung des Scripts etwas aufwendig. Eine einfache Lösung besteht darin die mitgelieferte Viewer-Seite aus dem Unterverzeichnis /pdfjs/web zu nutzen und über einen Iframe einzubinden:

<iframe id="pdf-js-viewer" 
        src="/pdfjs/web/viewer.html?file=/fileadmin/user_upload/netthelp.pdf" 
        title="webviewer" 
        frameborder="0" 
        width="500" 
        height="600">
</iframe>

Leider ist diese Lösung so nicht responsiv. Mit Hilfe von https://www.w3schools.com/ habe ich mir folgende Lösung erarbeitet (hier für eine Typo3 Installation):

<div style="position: relative;
            width: 100%;
            overflow: hidden;
            padding-top: 141%;
           ">
  <iframe id="pdf-js-viewer"
          src="/pdfjs/web/viewer.html?file=/fileadmin/user_upload/netthelp.pdf#zoom=auto"
          title="webviewer"
          frameborder="0"
          style="position: absolute;
                 top: 0;
                 left: 0;
                 bottom: 0;
                 right: 0;
                 width: 100%;
                 height: 100%;
                 border: none;
          ">
  </iframe>
</div>

Der Trick besteht darin ein DIV Element zu nutzen, das die ganze verfügbare Breite einnimmt und über padding-top eine darauf basierende Höhe bekommt. Bei den DIN Ax Dokumenten ist das Höhen-Breiten-Verhältnis 1,41:1 bei Portrait und 1:1,41=0,71:1 bei Landscape.

In dieses Element hinein wird dann der IFrame geladen und bekommt den vollständigen Platz zur Verfügung gestellt.

Mittels #zoom=auto wird erreicht, dass sich auch der PDF-Viewer an den zur Verfügung stehenden Platz anpasst. Hinter zoom=… könnten folgende Angaben stehen:

  •  200 (oder eine beliebige Prozentzahl)
  • page-width
  • page-height
  • page-fit
  • auto

Außer zoom gibt es noch den Parameter page=, damit kann angegeben werden, mit welcher Seite des PDFs die Darstellung startet. Weitere Möglichkeiten finden sich auf der Seite https://github.com/mozilla/pdf.js/wiki/Viewer-options.

Weitere Informationen:

Heute hatte ich ein blödes Problem zu lösen. Alle Anrufe auf die Familien-Festnetznummer landeten auf meinem Handy. In der Fritz!Box tauchten die Gespräche nicht auf, hier war auch keine entsprechende Weiterleitung eingerichtet. Nachdem ich auch alle Fritz!Apps deaktiviert hatte, war klar, es muss eine Einstellung bei O2 sein.

Leider konnte ich im Online-System keine Möglichkeit finden die Änderung vorzunehmen bzw. überhaupt zu prüfen.

Es geht auch im Festnetz über bestimmte Rufnummern bzw. Codes, die sich aber von den entsprechenden GSM-Codes unterscheiden.

Deaktivieren der sofortigen Rufumleitung geht bei o2-DSL über

  • *21*# für die Hauptrufnummer und mit
  • *21**# für alle Rufnummern.
  • Eine Rufumleitung auf einer bestimmten Rufnummer lässt sich mit *21**<Rufnummer># löschen.

Aktivieren kann man die Rufumleitung für die Hauptrufnummer übrigens mit

  • *21*<Zielrufnummer>#, vermutlich nur für die aktuelle Rufnummer
  • für alle Rufnummern mit *21*<Zielrufnummer>*#
  • und für eine bestimmte Rufnummer mit *21*<Zielrufnummer>*<Rufnummer>#

 

mit *#21*# oder *#21# soll man Informationen über den aktuellen Stand der Rufumleitung bekommen.

Eine umfangreiche Liste der Möglichkeiten ist auf folgender O2-Seite zu finden: https://static2.o9.de/blob/12926130/v=2/Binary/telefoniemerkmale-dsl-pdf-download.pdf

Hinweis: Die Codes unterscheiden sich leicht in unterschiedlichen Anleitungen, manchmal beginnen die Sequenzen mit **. Eine besondere Bedeutung kommt der Zahl zu, hier die 21:

  • 21 steht für ständige Rufumleitung
  • 61 für Rufumleitung bei Nichterreichen
  • 67 für Rufumleitung bei Besetzt