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:
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.
Seiten | ||
---|---|---|
Juli 2011 | Start der Homepage | |
30.11.11 | Praxis,Kunst,Spiele,Publikationen,Rätsel | 19 |
20.4.12 | Login + Termin | |
13.5.12 | Login + 30/60'/ZS/Kontoblatt, Bakterien | 28 |
Juni 12 | Login + Rx/Bilder | |
19.10.12 | Foto,Preisleistung | 48 |
10.4.13 | Grad0-3, Mandibularis, bimanuell, 20Jahre, Leistung | |
30.6.13 | Angstabbau, Frakturen, Nachdenken | 66 |
26.4.15 | Suchfenster auf der Frontseite | |
Mai 15 | NervHisto, Minimatrize | 78 |
Mai 17 | Leistungen, Nachdenken, Praxis, Selbsthilfe | |
Aug 17 | Bots+Humans, Bakterien+Viren, Spezialist | 81 |
Sep 17 | Statistiken: Dauer+Eintritt | |
5.10.17 | Statistiken: sessions + Mo-So | |
9.10.17 | Zukunft | 82 |
Jan 18 | Homepage-Statistiken | 83 |
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 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 damitJQuery ist eine open-source-Bibliothek aus Javascript-Befehlen. Sie wird auch von Microsoft verwendet.
Mit JQuery wird JavaScript verbessert. Damit lassen sich bequem und vielseitigFü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: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.
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++: 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.
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.
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.
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 sieht so aus:
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.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']);
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.
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.
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".
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.
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.
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.
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.
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.
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.
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?
111000 XOR 101010 = 010010Geheimtext XOR Sitzungscode = Klartext
010010 XOR 101010 = 111000
111000 × 10101000101101100 = XGeheimtext ⁄ private key = Klartext
X ⁄ Primfaktor A ⁄ Primfaktor B = 111000