W. Weilenmann
Dr. med. dent.
Walter Weilenmann
eidg. dipl. Zahnarzt
dipl. Natw. ETH

Mitglied SSO, SSGS
und SSO-Zürich.

Herstellung der Homepage

Die Homepage wächst wegen den fast täglich vorkommenden interessanten Sitzungen in der Praxis. Ein Eintrag kostet jeweils etwa eine Stunde Zeit.

Die Homepage sollte zunächst nur wie eine gewöhnliche zahnärztliche Webseite ausschauen. Bald wurde jedoch klar, dass sich mit gewöhnlichen Programmierkenntnissen auch eine Online-Agenda realisieren liess. Mit der Zeit erwies es sich, dass die Selbstverwaltung der Homepage sehr erfreuliche Folgen hat:

  • Man kann interessante Phänomene bei den Patienten fotografieren und in der Homepage beschreiben.
  • Diese Fotos erscheinen nach kurzer Zeit automatisch bei Google-Bilder und werden weltweit von zahlreichen Surfern aufgerufen.
  • Man kann interessante Behandlungsideen fotografieren und auf der Homepage präsentieren.
  • Diese Seiten werden von ratsuchenden Menschen gefunden und führen zu neuen Patienten.
  • Die Überarbeitung der einzelnen Seiten der Homepage führt zu einer Verdeutlichung der eigenen beruflichen Talente und Ausrichtung.
  • Die öffentliche Beschreibung der Praxis mit Bildern und Statistiken führt zu mehr Ehrlichkeit.

Vorgeschichte

2010 Versuch mit Joomla, was sich bald als zu schwierig erwies.

2011 Versuch nur mit HTML, was natürlich sehr einfach war. Es kamen bald CSS, PHP und JavaScript sowie eine MySQL-Datenbank hinzu. Als Editor verwende ich ausschliesslich Notepad++ und als Zeichnungsprogramm Paint.Net.

2012 Start der Agenda. Die Verbindung zur Praxis habe ich mit VB.Net gemacht.

2013 Statistik der direkten Überkappungen. Die besten statistischen Grafiken konnte ich mit R erstellen.

Der Einstieg war das Schwierigste: wie platziert man die Dateien auf der Homepage? Wie findet man die Fehler heraus, die mit JavaScript beim Benutzer, und wie jene, die mit PHP auf dem Server passieren? Das kann man nicht selber herausfinden, sondern muss man sich von einem Kollegen erklären lassen, der sich auskennt. Die weitere Lernkurve war steil und packend interessant und erfordert immer wieder Hilfetexte aus dem Internet, die in grosser Zahl vorhanden sind.


Die Gründe gegen Joomla

Joomla umfasst zu viele Einteilungsmöglichkeiten. Sie sind schwierig zu verstehen und für eine Zahnärzte-Homepage zu zahlreich. Man kann die einzelnen Abteilungen mit gesonderten Autorenrechten versehen. Doch waren ich und meine am besten geschulte Dentalassistentin trotz Joomla-Kurs nicht fähig, das komplexe System zu verstehen und die Homepage nach unseren Wünschen zu gestalten. Ausserdem akzeptiert Joomla aus Sicherheitsgründen keine eigenen php-Skripte und dergleichen. Es ist also nicht möglich, mit Joomla eine eigene Agenda zu programmieren.


HTML, CSS, JS und JQuery

HTML ist die Basissprache des Internets. Sie ist also unvergänglich. Das Internet ist voll von Erklärungen, und jeder Browser versteht sie. HTML zeigt die statischen Dinge an, also den Text, die Bilder, die Links und die Menus. Mit HTML kann man auch einfache Formulare (wie ein Anmeldungsformular) erstellen und die ausgefüllten Felder absenden. Die Links können zu weiteren HTML- oder PHP-Dateien führen.

CSS ist eine Formatierungssprache für HTML und entspricht den "Formatierungsvorlagen" von MS-Word. CSS gehört zum Internet-Standard und ist ebenso unvergänglich wie HTML. CSS ist im Internet massenhaft dokumeniert und dient dazu, HTML-Befehle zusammenzufassen. Mit CSS kann man eine Seite in Felder einteilen, welche je eigene Farben usw. haben. Wenn man ein solches CSS-Feld verändert und z.Bsp. eine neue Farbe oder Grösse vorgibt, so zeigen automatisch alle HTML-Seiten bei diesem Feld die neue Farbe resp. Grösse an.
Auf der Homepage sorgt CSS zum Beispiel dafür, dass alle Seiten 960 Pixel breit und in zwei Spalten von 600 und 360 Pixel eingeteilt sind.

JavaScript ist eine einfache Programmier-Sprache, die im Browser läuft und im Internet mit beinahe unendlich vielen Beispielen erklärt wird. Die JS-Programme werden zusammen mit dem HTML in den Browsern drin gespeichert. Sie haben also nicht den ganzen PC des Benutzers zur Verfügung und besitzen nur eingeschränkte Ressourcen. Mit JavaScript kann man daher keine grossen Programme schreiben.

Mit JS wird eine "statische" Homepage "dynamisch": man kann damit
  • den Benutzer führen und zum Beispiel auf den Doppelklick der Maus reagieren
  • Passworte kontrollieren,
  • Fragen an den Benutzer stellen, wenn er das oder jenes macht,
  • Bilder während der Eingabe ein- und ausblenden usw.
  • komplexere Daten vom Homepage-Server kommen lassen als es mit HTML möglich ist.

JQuery ist eine open-source-Bibliothek aus Javascript-Befehlen. Sie wird auch von Microsoft verwendet.

Mit JQuery wird JavaScript verbessert. Damit lassen sich bequem und vielseitig
  • Bilder drehen,
  • Teile einer Webseite visuell eindrücklicher verändern als mit selber geschriebenem JavaScript,
  • Texte mit diversen Effekten ein- und ausblenden usw.
  • Daten mit der Homepage sicherer austauschen als mit einfachen JavaScript-Befehlen.

Surfer und Server

Für einen Homepage-Neuling ist es schwierig zu verstehen, wie der Besucher am Laptop und der Webserver im Internet zusammenarbeiten. Deshalb hier ein Beispiel:

Der Beginn ist einfach:
  1. Ein Besucher sucht im Laptop eine HTML-Datei und tippt z.B. www.zahnarztweilenmann.ch ein
  2. Sein Browser (Chrome, Safari usw.) sucht den Webserver, der zahnarztweilenmann.ch hostet
  3. Der Webserver sendet die vorgefertigte HTML-Datei von zahnarztweilenmann.ch zurück
  4. Der Laptop zeigt die Homepage an
Etwas komplizierter mit Menu oder Link:
  1. Der Besucher klickt auf einen Punkt im Menu oder auf einen Link der Homepage.
  2. Der Laptop verlangt vom Webserver eine neue HTML-Datei oder ruft dort ein PHP-Programm auf.
  3. Der Webserver startet ein PHP-Programm, greift auf die MySQL-Datenbank zu und generiert eine neue HTML-Datei mitsamt neuen JavaScript-Programmen und sendet diese dem Laptop
  4. Der Laptop zeigt die neue Seite an.

Wenn man dieses Wechselspiel zwischen Laptop und Webserver ausprobiert, lernt man automatisch immer mehr dazu. Im Internet sind die einzelnen Möglichkeiten an zahllosen Stellen sehr gut beschrieben. Insbesondere ist es modern, nicht jedesmal die ganze Seite neu aufzubauen, sondern stattdessen nur einzelne Teile. Das Bild im Browser flackert dann weniger, und die Homepage wird schneller.

   Laptop     Webserver
Laptop-Internet
   Laptop     Webserver   Database
Laptop-Internet

Serversprache PHP und Datenbank MySQL

PHP ist eine open-source-Skriptsprache. Sie ist sehr umfangreich und läuft nur auf (S) und nicht beim (B). PHP benutzt man, um je nach Aufruf vom (B) und z.B. mittels Variablen einer Datenbank eine neue HTML-Datei oder einen HTML-Text zu erstellen und an (B) zu senden. Dabei können auch komplizierte Berechnungen mit grossem Rechenaufwand rasch durchgeführt werden. Im Gegensatz zu JavaScript kann PHP die Daten permanent in einer Datenbank (meist MySQL) speichern.

MySQL wird von jedem Internet-Provider unterstützt und ist open-source. MySQL ist etwa so mächtig wie MS-SQL von Microsoft. Die Datenbank ist äusserst rasch und zuverlässig. Sie wird bei (S) gespeichert und kann über eine (Passwort-geschützte) Internetseite direkt bedient werden.


Notepad++ und Paint.Net

Notepad++: Um die HTML-, JS-, CSS- und PHP-Dateien zu schreiben, verwende ich Notepad++. Diese Dateien enthalten alle nur ganz gewöhnlich lesbaren Text, und es ist keine spezielle Programmier-Software nötig. Notepad++ hat eine perfekte Verbindung zur Homepage, so dass der Dateiaustausch keine Mühe bereitet. Es ist Shareware und installiert sich selber. Das Programm ist so erfolgreich, dass es alle paar Monate ein Update gibt. Mit Notepad++ kann man die Homepage von überall her verändern, ob PC oder Laptop, in der Praxis, zuhause oder irgendwo sonst.

Paint.Net: Um die Bilder zu bearbeiten, verwende ich Paint.Net. Es ist Shareware und installiert sich selber. Es kann viele Effekte ausführen, die man auch in professionellen Bildbearbeitungsprogrammen findet. Das Ziel im Internet sind aber nicht maximal gute Bilder, sondern möglichst kleine Dateigrössen, weil die Homepage sonst zu langsam wird. Das erreicht man, indem die Bilder genau so gross zugeschnitten werden, wie sie auf der Homepage erscheinen, und dann auf einen Qualitätsfaktor von 70-80% komprimiert werden. So resultieren Dateigrössen von maximal 20 KB.


Statistiken mit R

R: Um die survival-Kurven der direkten Überkappungen zu zeichnen, erwies sich die Software R als das beste Tool. Es berechnet die Grafik und kann davon eine png-Datei erstellen. Sie kann per FTP-Zugriff der Homepage gesendet werden zur automatischen Aktualisierung der Plots.


Zusammenspiel Praxis − Homepage

In der Praxis und beim Provider der Homepage stehen je ein Server im Dauerbetrieb. Ich habe die Homepage (inkl. Agenda) so programmiert, dass der Homepage-Server passiv bleibt. Das heisst, er kann nicht von sich aus die Praxis anrufen. Dies schien mir aus Sicherheitsgründen ratsam.

Update-Häufigkeit: In der Praxis läft der Server mit der Zawin-Datenbank im Dauerbetrieb. Darauf habe ich mit VB.Net ein Programm geschrieben, das die Homepage mit Daten beliefert und von dort Daten abholt. Es schaut jede Minute einmal, ob ein Besucher gekommen ist. In diesem Fall schaut es alle 10 Sekunden, ob der Besucher einen Termin reserviert etc., und sendet umgekehrt alle 10 Sekunden die Änderungen der Agenda, und zwar solange, bis der Besucher inaktiv wird.

Der Praxis-Server sendet dem Homepage-Server jede Nacht die neuen Röntgenbilder, Statistiken usw. Um den Homepage-Server nicht zu überfordern, werden alle Bilder auf eine Breite von maximal 600 Pixel skaliert. Vom Patientenstamm werden einmal pro Woche nur jene Leute gesendet, die eine Handy-Nummer haben.


Sicherheit des Internet-Servers

Am 27. Mai 2013, 18:56:00 Uhr wurde meine Homepage "geknackt". Ich fand das Datum wegen dem veränderten Dateidatum der befallenen Dateien. Der Eindringling fand möglicherweise mein FTP-Passwort heraus und konnte dann auf meiner Homepage ein Javascript hineinschreiben, welches irgendwelche verbotenen Dinge machen sollte. Zum Glück wurde dies von Microsoft Security Essentials meines Wissens überall rechtzeitig verhindert. Und zum Glück hat mir ein Kollege sofort angerufen, als er beim Besuch meiner Homepage an seinem PC eine Warnung erhielt.

Ob mein Passwort herausgefunden wurde, weiss ich nicht. Es kann durch zufälliges Pröbeln gefunden worden sein. Dann hätte der Angreifer viele Male meinen FTP-Zugang ausprobieren müssen. Leider knnnte ich nicht herausfinden, wie oft mein FTP-Zugang benutzt wurde. Es kann auch sein, dass ein Angreifer meine Tastatur beobachtet (Keylogger). Das habe ich überprüft und nichts gefunden. Viel wahrscheinlicher ist es, dass jemand auf dem Joomla-Server einen Schadcode installieren konnte, der alle Kunden des Providers ansteckt. Meine entsprechende Frage in einem Email an den Provider wurde nicht beantwortet.

Ich konnte den Trojaner sehr leicht entfernen. Es handelte sich um den BlackHole-exlpoit-kit. Er hat in mehreren Dateien sein JavaScript eingefügt, das sehr leicht zu erkennen ist. Die Dateien hatten alle die Endung "HTML" oder "JS". Das habe ich nun geändert.

Eine Schwachstelle der Homepages ist der FTP-Zugang. Damit kann man die Daten der Homepage bequem einsehen und verändern. Ich habe den Zugang letzten Mai erstmals aus Faulheit dauernd offen gelassen - in der Meinung, das Passwort (es hiess etwa g∧hX0xU!) sei ein genügend guter Schutz. Es wurde mir vom Besitzer des Homepage-Servers gegeben.

Gegenmassnahme: Seither habe ich ein Passwort mit 16 Buchstaben (ein paar zürichdeutsche Worte) und öffne den FTP-Zugang nicht für jeden, sondern nur für meine IP. Dass man den FTP-Zugang derart einschränken kann, war mir vorher nicht klar. Mit dem alten Passwort wäre die Homepage rasch von Neuem infiziert worden. Denn das alte Passwort ist jetzt bestimmt in den käuflichen Bibliotheken der gestohlenen Passwörter drin.

Der Trojaner "BlackHole"

Der Trojaner sieht so aus:

Trojaner Es ist ein etwa 30 Zeilen langes JavaScript, das an das Ende von mehreren meiner Dateien angehängt worden ist. Das Script ist verschlüsselt und besteht nur aus hexadezimalen Ziffern. Ich kann es also nicht verstehen.

Sicherheit vor SQL-Injection

Am 10. März 2022, 16:41:00 Uhr bekam die Homepage eine SQL-Injection.
Danach meldete die Homepage beim Aufruf der Seite 'Praxis/Homepage-Statistiken' immer wieder "XSS".

Der Eindringling hat dieses Javascript in seinen useragent hineingeschrieben:

Windows Firefox  / "><script >alert(String.fromCharCode(88,83,83))/Nerv

Und der useragent wurde genau so in der Datenbank gespeichert. Fortan kam jedesmal die Meldung "XSS", wenn die Homepage die Liste der useragents las. Denn der String.fromCharCode(88,83,83) ist gleich "XSS".

Die Abhilfe war der Befehl "real_excape_string":
$UA = $mysqli->real_escape_string($_SESSION['useragent']);

Abhilfe gegen SQL-Injection

Der Befehl 'real_escape_string' ersetzt die Programm-wirksamen eckigen Pfeile > und < durch die genau gleich ausschauenden grafischen Sonderzeichen > und <. Diese sind unwirksam und lösen keine Programm-Abweichungen mehr aus.


Sicherheit vor Session HiJacking

Diese Homepage arbeitet mit Cookies, auf denen eine Session-ID gespeichert ist. Das erlaubt dem User, sich einzuloggen, den Browser abzustellen und kurze Zeit später wieder anzustellen, ohne dass er sich erneut einloggen muss.

In einem öffentlichen WLAN kann das Cookie jedoch gestohlen werden. Der Dieb kopiert die Session-ID des Users in sein eigenes Cookie, und schon meint die Homepage, der User habe sich zweimal eingeloggt. Der Server bedient beide Browser gleichermassen.

Zum HiJacking braucht der Dieb nur zum Beispiel den Firefox-Browser und die Software Firesheep.

HiJacking ist erst ein Problem, wenn sich der User eingeloggt hat. Dann kann der Dieb nämlich auch die geschützten Dokumente im Login-Bereich (Röntgenbilder usw.) stehlen und einen falschen Termin buchen.

Gegenmassnahme: Auf dem Server werden nicht nur die Session-ID gespeichert, sondern auch der Name und die Version des Browsers ("User-Agent") sowie die IP. Nun muss der HiJacker auch noch die gleiche IP haben und den gleichen Browser verwenden, und das ist schon schwieriger.

In einem öffentlichen WLAN kann die Session-ID gestohlen werden. Durch eine einfache Massnahme kann das Hijacking jedoch erschwert werden, so dass ein "Gelegenheitsdieb" (Scriptkiddie) keinen Spass mehr daran hat.


Abschauen, helfen und Anleitungen

Die Webcrawler arbeiten unvorstellbar schnell und durchsuchen täglich alle Homepages. Deshalb findet man diese Seite auch, wenn man keinen Zahnarzt, sondern z. Bsp. "Herstellung der Homepage" sucht.

Einer ist zum Beispiel Lehrer. Er findet diese Homepage ein gutes Beispiel für die Verknüpfung von Kunst und Arbeit und zeigt sie deshalb seinen Schülern.

Einem anderen hat die Terminreservation dieser Homepage so gut gefallen, dass er sie als Vorbild für eine Neuentwicklung genommen hat, die er nun an alle Zahnärzte verkauft: Elektronische Agenda

Ein Dritter hat mich gebeten, hier auf sein E-Book hinzuweisen:
https://www.homepage-erstellen.de/thema/homepage-programm
Das ist eine genaue Anleitung, mit der man selber eine Homepage erstellen und laufend mit eigenen Bildern aktualisieren kann, was ich sehr empfehle. Damit bekommt man eine "dynamische Homepage" anstelle einer "statischen".


Weshalb kein Zawin.net?

Eine Absicht der Homepage war, Erfahrungen für ein Zawin.net zu sammeln.
Denn ein "Zahnarztprogramm in der Cloud" hätte einige Vorteile:
  • Die Kunden müssen selber kein Update mehr machen.
  • Die Kunden müssen sich nicht um die Datensicherheit kümmern.
  • Die Kunden haben auch zuhause einen Zugriff auf das Zawin.
  • Die Hardware- und Installationskosten werden kleiner.
  • Die Kunden brauchen nur noch Mobiles, Laptops, PCs und Drucker und eine Internetverbindung. Sie brauchen keinen Server und kein Praxis-Netzwerk mehr.
Die Erfahrungen der Homepage sind im Prinzip sehr positiv:
  • Die Canvas von HTML5 können die grafischen Aufgaben des Zahnstatus lösen.
  • Die Ajax-Abfragen sind so rasch, dass auch in der Cloud ein realtime-Gefühl entsteht.
  • HTTPS schützt vor dem "man in the middle" (kostet aber eine jährliche Lizenz).
Die folgenden Erwägungen sprechen gegen Zawin.net:
  • Auch ein geschützter Server kann böswillig von einem Insider/Angestellten geknackt werden.
  • Je mehr Kunden auf einem Server sind, desto lohnender wird das Ziel für Hacker und Behörden.
  • Ein einziger Internet-Ausfall stoppt gleichzeitig mehrere Praxen. Das ist der wichtigste Grund gegen Zawin.net.
  • Die juristischen Anforderungen an einen medizinischen Cloud-Speicher sind noch unbekannt.
  • Externe Geräte (Scanner, USB-Camera, WLAN-App) sind nicht alle so einfach zu berücksichtigen.

Weshalb doch ein Zawin.net?

Viele Zahnärzte würden eine Cloud-Version begrüssen. Vor allem, wenn sie billiger ist als die Windows-Version.

Die Windows-Version kann über ein VPN auch auf eine externe Datenbank zugreifen. Somit kann die bisherige Datenbank, wenn sie extern gelagert wird, auch für die Cloud-Version verwendet werden.

Die Cloud-Version kann über Web-Services auf die Datenbank zugreifen. Ihr Leistungsumfang wächst im Gleichschritt mit den Web-Services. Dem Kunden steht auch jederzeit die volle Leistung von Zawin zur Verfügung, wenn er mit der Windows-Version über ein VPN arbeitet.


HTTPS

Am 18.11.2018 stellten wir die Homepage auf HTTPS um, weil im Browser von Google das Zeichen "Nicht sicher" stört. Die Umstellung war ziemlich umständlich.

Provider 1aHosting nicht hilfsbereit

Leider wollte der bisherige Provider (1aHosting) aus unbekanntem Grund und ohne Erklärung die Umstellung nicht vornehmen. Er hätte ein SSL-Zertifikat für zahnarztweilenmann.ch anfordern und installieren sollen.

Wechsel zu MetaNet

Deshalb transferierte ich alle Daten zu MetaNet. Der Download von 1aHosting dauerte etwa 12 Stunden. Der Upload bei MetaNet dauerte hingegen nur etwa 30 Minuten. Das war eine ungeheure Geschwindigkeitsverbesserung. Das SSL-Zertifikat beziehen wir von LetsEncrypt. Es ist gratis und wird alle drei Monate automatisch erneuert.

Funktionsweise von HTTPS

Wenn Herr A in seinem Browser die Adresse https:\\www.XYZ eintippt, so verlangt der Browser von www.XYZ zuerst das SSL-Zertifikat. Er sendet es einer Autorisierungsstelle (es gibt weltweit etwa 700) und erhält die Auskunft, ob das Zertifikat von www.XYZ stammt oder nicht (zum Beispiel bei Phishing). Falls es echt ist, entnimmt ihm der Browser den global key. Mit dieser Zahl verschlüsselt er seinen geheimen Sitzungscode und sendet ihn an www.XYZ. www.XYZ kann den Sitzungscode mit seinem private key entschlüsseln. Der "man in the middle" kann das nicht, weil er den private key nicht kennt und jahrelang rechnen müsste, um ihn herauszufinden. Nun kann www.XYZ den Datenaustausch mit dem Sitzungscode von Herrn A verschlüsseln. Verschlüsselungen mit einem Sitzungscode sind viel rascher als mit einem global und private key.

Quanten-Computer

An der ETH-Zürich wird ein Quantencomputer entwickelt. Er kann erst mit 4 bit rechnen. Sobald er mit KB rechnen kann, wird das Internet unsicher.

kein Ausweg?

Die asymmetrische Codierung (mit public und private key) wird nicht nur bei SSL, sondern auch bei HIN und anderen Sicherheitsprodukten angewendet. Als einziger Ausweg wird ein Sitzungscode diskutiert, der einmalig und genau gleich lang wie die Botschaft ist. Das Problem: wie transportiert man diesen Sitzungscode sicher?

rasche XOR-Codierung
Klartext XOR Sitzungscode = Geheimtext
111000 XOR 101010 = 010010
Geheimtext XOR Sitzungscode = Klartext
010010 XOR 101010 = 111000
langsame Faktoren-Codierung
Klartext × global key = Geheimtext
111000 × 10101000101101100 = X
Geheimtext ⁄ private key = Klartext
X ⁄ Primfaktor A ⁄ Primfaktor B = 111000
Copyright © 2024 Icon W. Weilenmann
erstellt: 30.06.2013 - 26.12.2023