Automatische Seriennummer-Erkennung – so klappt`s!

Eigentlich wäre es so einfach gewesen: Keine händische Eingabe mehr von Seriennummern – dafür das Einlesen über ein Lesestift in eine Fiori-App. Besonders, da man im Normalfall eine Vielzahl von Seriennummern zu verarbeiten hat, versprach man sich mit dem Lesestift einen deutlich schnelleren und sichereren Prozess.
Nur leider war die Oberfläche zu „glänzig“ und die Erfolgsrate lag nur bei 33%. Es musste also eine Alternative her.

Unsere Idee kam von den ESR-Scan-Apps der Banken: Weshalb nicht die Seriennummern filmen bis wir eine gültige Nummer erkennen? So gedacht, so einen POC gemacht:

Wir schraubten eine WebCam auf ein Stativ und bauten eine Vorrichtung aus Holz, so dass Produkte mit der Seriennummer schnell und einfach darunter geschoben werden können. Im Browser läuft eine Fiori-App, die auf das produzierte HTML5-Video-Element zugreift. Zwar werden nicht mehr alle Browser unterstützt, aber Chrom und Firefox funktionieren prima. Ungefähr alle 500ms machen wir ein internes Foto aus dem Video-Stream, das trotz der Oberfläche gestochen scharf ist. Um Störfaktoren zu reduzieren, wandeln wir diese mittels HTML-Boardmittel in ein Graustufen-Bild um und passen den Kontrast an. Somit sind auch die letzten Oberflächenprobleme «geglättet». Für die OCR-Erkennung verwenden wir tesseract.js mit dem vorgelernten OCRB Schriftsatz. Das Grundkonzept basiert auf Computer Vision Algorithmen. Es erkennt den Text in Bereichen, Linien, Wörtern und Zeichen.

Das Resultat
In ein paar Millisekunden wird die Seriennummer vollständig mit Buchstaben und Zahlen erkannt. Voraussetzung dafür ist, dass das Foto möglichst gerade ist. In der Regel müssen 1-2 Fotos ausgewertet werden, bis das Muster zuverlässig erkannt wird. Nur das S und die 5 sowie die 0 und das O machen manchmal bei der Erkennung etwas Probleme. Dies ist aber im Kontext klar erkennbar und somit kann im Zweifelsfall korrigiert werden.

Alternativ zu Tesseract haben wir den SAP Leonardo Service «Inference Service for Scene Text Recognition» aus der Cloud angebunden. Dieser Dienst gehört in die Kategorie des «Machine Learnings», wobei das Modell fest verdrahtet ist. Obwohl das kleine Bild über das Internet transferiert werden muss, geht der Prozess recht zackig. Das Resultat lässt sich auch hier sehen – mit den ähnlichen Herrausforderungen wie bei Tesseract. Interessanterweise, wird auch bei diesem Service das Resultat mit dem 2. oder 3. Foto genauer.

Fazit: Das Resultat lässt sich sehen und macht Spass.

Tesseract: Die OCR-Erkennung ist schnell, braucht keine Installation und ist kostengünstig. Die gelernten Bibliotheken für die maschinelle Erkennung sind brauchbar, besonders dank OCRB.
SAP: Schnell und einfach zu integrieren, ein eigener Learning-Prozess ist nicht vorgesehen (mit diesem Service), die Erkennung funktioniert aber gut.

Security in der Web-App Entwicklung

Mir wird immer mal wieder die Frage nach Security in der Fiori-Entwicklung gestellt. Ich muss vorwegnehmen, dass ich hier aus Sicht der Entwicklung schreibe und Fragestellungen auch aus dieser Warte betrachtet werden. Lassen wir hier also betriebliche und netzwerk-technische Aspekte mal grosszügig ausser Acht.

Security und SAP, ob nun mit ABAP oder JavaScript, werden erfahrungsgemäss relativ locker gehandhabt. Klar, wir diskutieren Berechtigungen wie den Buchungskreis usw. legen Berechtigungsobjekte und Rollen an. Aber es bleiben offenen Fragen, beispielsweise die SQL-Injection in ABAP? Dieses Thema nahm die SAP zwar schon vor ein paar Jahren an der TechEd und anderen Veranstaltungen auf, aber so richtig durchgesetzt hat es sich noch nicht – zumindest nehme ich das so wahr.

Aber zurück zur Eingangsfrage: Betrachten wir mal ausschliesslich Web-Anwendungen, also die liebgewordenen Fiori Apps. Was soll da nun anders sein als in einem ABAP-Report? Wir haben eine Schnittstelle! Eine OData-Schnittstelle. Weshalb ist das so wichtig? Im Gegensatz zu einem SAP GUI ist es für uns in diesem Zusammenhang nicht realisierbar den Browser und erst recht die Schnittstelle unter Kontrolle zu haben. So haben wir bereits OData-Schnittstellen gebaut, die sowohl eine Fiori-App bediente als auch eine Portal-Seite, die nichts mit SAP zu tun hat. Deshalb ist es wichtig, ein Augenmerk auf die Security zu legen.

Wenn mir die Eingangsfrage gestellt wird, dann denke ich meistens: «Wow, das Thema ist angekommen.» Eine präzise Antwort darauf zu liefern, wenn möglich noch während dem Kaffee, der sich mit fortschreitender Zeit dem Ende zuneigt, ist dann schon etwas komplizierter. In den meisten Fällen erwähne ich dann die OWASP Top 10. Die OWASP Top 10 ist eine Liste der zehn kritischsten Sicherheitsrisiken für Webanwendungen. 2003 ging dieses Projekt an den Start und bringt alle paar Jahre eine aktualisierte Liste heraus. Grundlage der Top 10 ist ein riesiger Datenpool weltweiter Unternehmen, die auf Anwendungs-Sicherheit spezialisiert sind. Die letzte Version wurde Ende 2017 veröffentlicht – hier geht es zur aktuellen Übersicht.

Zugegeben, in dieser Liste findet man Punkte, die eher die Basis angehen oder im SAP-Dasein vielleicht weniger relevant zu scheinen mögen. Aber es lohnt sich trotzdem diese mal etwas genauer zu studieren. In der folgenden Abbildung sind die aktuellen Top 10 Risiken und dessen Veränderungen zu 2013 abgebildet:

Jede dieser Risiken ist auf einer Seite kompakt beschrieben:

  • Bedrohungsquellen
  • Angriffsvektoren
  • Verbreitung
  • Auffindbarkeit
  • Technische Auswirkungen und Auswirkungen auf das Unternehmen.

Ein paar Beispiele:

A1: Injection: Ein bekanntes Beispiel ist die SQL-Injection. Diese ist eigentlich nur bei dynamischem SQL in ABAP relevant. Aber genau das hat man ja oft in OData… Und nicht vergessen darf man die Betriebskommandos.

A3: Sensitive Daten: Eine Applikation verwendet eine fortlaufende Nummer für Sicherheitsrelevante Daten. In Mails wird eine URL mit dieser ID mitgesendet, z.B. die ID 800002. Mit dieser können dann persönliche Daten eingesehen werden. Der nächste Kunde bzw. Fall erhält 800003… Ein Einfaches, dieses von Hand zu ändern und fremde Daten einzusehen. Das passierte einem sehr grossen Bahnunternehmen in Europa.

A7: Cross-Site Scripting: In einem Eingabefeld wird JavaScript so eingegeben, so dass die Applikation weiteren JavaScript-Code nachladet und diesen ausführt, z.B. einen Key-Logger…

Ich persönlich finde mit dem Studium von diesen OWASP Top 10 kann man sich gut in das Thema einlesen: Die Top 10 bietet eine kompakte, anschauliche Übersicht und dazu Tipps, wie man diese Lücken findet.

Der Blog wurde für itelligence AG betreffend der itelligence World 2018 am 20. September 2018 in Regensdorf (ZH) publiziert.