fix(kontakte): LinkedIn-Foto nur aus der Vorschau, klarere Meldung

Anlass: Bei einem Kontakt kam das Foto, beim naechsten nicht. Der Vergleich
der beiden Profilseiten zeigt warum - das zweite Profil liefert als
og:image nur LinkedIns Ersatzgrafik (static.licdn.com/aero-v1/sc/h/...),
weil die Sichtbarkeit des Fotos auf "Meine Kontakte" steht. Angemeldet
sieht man es, der Abruf hier ist es nicht.

Zwei Konsequenzen:

* Die Rueckfallebene "erste media.licdn.com-Adresse im Quelltext" faellt
  weg. Dieselbe Seite enthaelt 24 solcher Adressen: Firmenlogos,
  Beitragsbilder und die Fotos der "aehnlichen Profile" am Rand. Nur die
  Open-Graph-Vorschau gehoert nachweislich zum aufgerufenen Profil -
  alles andere haette irgendwann ein fremdes Gesicht an einen Kontakt
  gehaengt.
* Die Meldung sagt jetzt, was wirklich los ist: "nur fuer Kontakte
  sichtbar oder es gibt keines" statt "hat kein eigenes Foto". Von
  aussen sind die beiden Faelle nicht unterscheidbar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sascha Wolf
2026-09-10 00:30:30 +02:00
co-authored by Claude Opus 5
parent 0a2cf52e8a
commit 46983a7e2c
5 changed files with 68 additions and 24 deletions
+7 -3
View File
@@ -502,9 +502,13 @@ Zwei Handgriffe nimmt der Dialog beim **Anlegen** ab:
dem Feld macht dasselbe auf Zuruf - etwa, wenn die Adresse nachgetragen wird.
Ein selbst hochgeladenes Foto wird dabei nie überschrieben.
Klappt es nicht, steht der Grund unter dem Feld: Das Profil ist nicht
öffentlich, es hat gar kein eigenes Foto, oder LinkedIn hat die Anfrage
abgewiesen. Dann bleibt der gewohnte Weg über *Ändern* am Foto.
Klappt es nicht, steht der Grund unter dem Feld. Der häufigste ist „nur für
Kontakte sichtbar oder keines": LinkedIn zeigt ein Profilfoto nur dann
öffentlich, wenn dessen Sichtbarkeit auf *Alle LinkedIn-Mitglieder* steht.
Steht sie auf *Meine Kontakte*, sieht **man selbst** das Foto im eigenen
LinkedIn - das CRM fragt aber ohne Anmeldung an und bekommt es nicht. Genauso
möglich: LinkedIn weist die Anfrage ab. In allen Fällen bleibt der gewohnte
Weg über *Ändern* am Foto.
Im **Netzwerk** sind Kreise Kontakte (Farbe = Art, Größe = Anzahl
Verbindungen) und Quadrate Benutzer, die Kontakte angelegt haben. Grüne Linien
+13 -4
View File
@@ -140,13 +140,22 @@ Der Weg in Stichpunkten und die Gründe dafür:
der Seite heraus scheitert an der Same-Origin-Policy.
* **Browser-Kennung im Kopf.** Ohne `User-Agent` antwortet LinkedIn oft gar
nicht erst.
* **Nur `og:image`/`twitter:image`**, ersatzweise eine `media.licdn.com`-Adresse
aus dem Quelltext. Es wird nichts angemeldet und nichts Geschütztes gelesen.
* **Nur `og:image`/`twitter:image`** - und sonst nichts. Im übrigen Quelltext
wird bewusst *nicht* gesucht: eine Profilseite enthält Dutzende Adressen des
LinkedIn-CDN (Firmenlogos, Beitragsbilder, die Fotos der „ähnlichen Profile"
am Rand). Die erste davon zu nehmen, hängt einem Kontakt irgendwann das
Gesicht einer fremden Person an. Es wird nichts angemeldet und nichts
Geschütztes gelesen.
* **Herkunft wird geprüft.** Das Bild muss über `https` von `licdn.com` kommen
und `/dms/image/` im Pfad haben - sonst könnte eine manipulierte Seite eine
beliebige Adresse unterschieben.
* **Platzhalter werden abgewiesen.** Profile ohne eigenes Foto liefern eine
graue Silhouette (`ghost` im Pfad); die soll kein Kontaktfoto werden.
* **Platzhalter werden abgewiesen.** Statt eines Fotos liefert LinkedIn dann die
graue Silhouette (`ghost` im Pfad) oder eine feste Grafik von
`static.licdn.com` (`/aero-v1/sc/h/...`). Das passiert in zwei Fällen, die von
außen nicht unterscheidbar sind: Das Profil hat kein Foto, **oder** dessen
Sichtbarkeit steht auf „Meine Kontakte" statt „Alle LinkedIn-Mitglieder". Im
zweiten Fall sieht man das Foto angemeldet sehr wohl - der Abruf hier ist aber
nicht angemeldet. Die Meldung nennt deshalb beide Möglichkeiten.
* **Grenzen:** 12 s Zeitlimit je Anfrage, höchstens 5 MB Bild.
Gibt LinkedIn die Seite nicht heraus (Status 999 oder 403 bei zu vielen