ubuntuusers.de

[Firefox] Bildanhänge werden beim anklicken immer heruntergeladen

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

schwarzheit Team-Icon

Supporter
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 8506

Hier mal eine Idee als Userscript (Violentmonkey/Tampermonkey sonstige *mokeys) und Browserunabhängig. Also egal ob FF oder Chrome oder irgendwas derartig basiertes.

Bitte mal mit testen wer Lust hat.

  • erkennt JPEG, PNG, GIF, WebP, AVIF und SVG anhand des Inhalts - auch dann wenn die Dateiendung fehlt

  • keine Speicherung auf Festplatte

// ==UserScript==
// @name         UbuntuUsers Bilder direkt öffnen (vollständig)
// @namespace    Violentmonkey
// @author       schwarzheit
// @version      2.0
// @description  Öffnet Bildanhänge von ubuntuusers direkt und prüft den echten Dateiinhalt.
// @match        https://*.ubuntuusers.de/*
// @grant        GM_xmlhttpRequest
// @connect      media-cdn.ubuntu-de.org
// ==/UserScript==

(function () {
    'use strict';


    // Prüft die tatsächlichen Dateidaten
    // und nicht nur Dateiendungen oder Dateinamen
    function erkenneBild(buffer) {

        const bytes = new Uint8Array(buffer);

        // JPEG
        if (
            bytes[0] === 0xff &&
            bytes[1] === 0xd8 &&
            bytes[2] === 0xff
        ) {
            return "image/jpeg";
        }


        // PNG
        if (
            bytes[0] === 0x89 &&
            bytes[1] === 0x50 &&
            bytes[2] === 0x4e &&
            bytes[3] === 0x47
        ) {
            return "image/png";
        }


        // GIF
        const text6 = new TextDecoder().decode(bytes.slice(0, 6));

        if (
            text6 === "GIF87a" ||
            text6 === "GIF89a"
        ) {
            return "image/gif";
        }


        // WebP
        const text12 = new TextDecoder().decode(bytes.slice(0, 12));

        if (
            text12.startsWith("RIFF") &&
            text12.substring(8, 12) === "WEBP"
        ) {
            return "image/webp";
        }


        // AVIF
        // ISO Base Media File Format:
        // Bytes 4-11 enthalten den Brand-Namen
        const text16 = new TextDecoder().decode(bytes.slice(4, 16));

        if (
            text16.includes("avif") ||
            text16.includes("avis")
        ) {
            return "image/avif";
        }


        // SVG
        const text = new TextDecoder().decode(bytes.slice(0, 500));

        if (
            text.includes("<svg") ||
            text.includes("<?xml")
        ) {
            return "image/svg+xml";
        }


        // Kein bekanntes Bildformat
        return null;
    }


    // Alle Klicks auf der Ubuntuusers-Seite überwachen
    document.addEventListener(
        "click",
        function (e) {

            const link = e.target.closest("a");

            if (!link) {
                return;
            }


            const url = link.href;


            // Nur echte Ubuntuusers-CDN-Dateien prüfen
            if (
                !url.startsWith(
                    "https://media-cdn.ubuntu-de.org/"
                )
            ) {
                return;
            }


            // Original-Download verhindern
            e.preventDefault();
            e.stopImmediatePropagation();


            // Datei in den Arbeitsspeicher laden
            GM_xmlhttpRequest({
                method: "GET",
                url: url,
                responseType: "arraybuffer",

                onload: function (antwort) {

                    const bildtyp =
                        erkenneBild(
                            antwort.response
                        );


                    // Keine Bilddatei erkannt
                    if (!bildtyp) {

                        alert(
                            "Die Datei ist kein unterstütztes Bild."
                        );

                        return;
                    }


                    // Erst nach erfolgreicher Prüfung anzeigen
                    const blob = new Blob(
                        [
                            antwort.response
                        ],
                        {
                            type: bildtyp
                        }
                    );


                    const blobUrl =
                        URL.createObjectURL(
                            blob
                        );


                    const tab =
                        window.open();


                    tab.document.write(`
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Bild</title>
</head>
<body style="
margin:0;
background:#222;
display:flex;
justify-content:center;
align-items:center;
height:100vh;
">
<img src="${blobUrl}" style="
max-width:100%;
max-height:100%;
">
</body>
</html>
`);

                    tab.document.close();

                },


                onerror: function () {

                    alert(
                        "Bild konnte nicht geladen werden."
                    );

                }

            });

        },
        true
    );

})();

Nachtrag: Ich werde mir trotzdem keine dummen Bildanhänge anguggen.

Nachtrag 2: ich find atm keine jpeg, gif und svg Dateien im Forum zum testen. Wenn jemand welche hat einfach mal zum testen anhängen. Danke.

schwarzheit Team-Icon

Supporter
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 8506

zum testen

cat-face.svg (2.8 KiB)
Download cat-face.svg
Bilder

schragge

Anmeldungsdatum:
27. Januar 2022

Beiträge: 225

shiro schrieb:

if [ $(file $datei | sed -n 's/^.* \(JPEG\|PNG\|AVIF\|Web\/P\) [iI]mage.*$/\1/p' | wc -l) -eq 1 ]

Ich würde hier wahrscheinlich mimetype statt file einsetzen. Einheitliche Ausgabe macht es einfacher. Und Quoten nicht vergessen, für den Fall dass die Dateiname auch Leerzeichen enthält.

1
if mimetype -b "$datei" | grep -Eq '^image/(avif|gif|jpeg|svg\+xml|webp)$'

P.S. Hab eben an "böse" Dateinamen gedacht wie z. B.

'Bildchen;rm -rf . .png'

Nach meinem Verständnis würde hier sowas wohl nicht passieren, da die Dateinamen beim Herunterladen abgeändert werden, und z.B. Leerzeichen durch Unterstriche ersetzt. Quoten würde ich trotzdem.

Maranto

Anmeldungsdatum:
1. Mai 2026

Beiträge: 73

Keine Ahnung ob das schon im Faden vorkam. Habe mal in der

/handlers.json

des FF Profils rumgebastelt und schwupps waren fehlende Bilder Einträge in den FF Einstellungen(Dateien und Anwendungen). Lasse so alle Bildanhänge mit Mini Bildbetrachter öffnen. Der kann auch gleich per Mausrad zoomen u. ggf. Bildpfad(/tmp/..) an andere Apps weiterreichen. Bisher hat FF noch nicht gemeckert.

Maranto

Anmeldungsdatum:
1. Mai 2026

Beiträge: 73

Fortsetzung zur "handlers.json".

Das wäre bspw. für png: – Kann selbst wenn "image/png" noch nicht vorhanden ist eingefügt werden, "," Trennung beachten zw. den Typen. (noch Anwendung ändern) FF sollte während des Editierens geschlossen bleiben. Änderung per GUI über FF Einstellungen/../Dateien und Anwendungen. Orientieren kann man sich ganz gut am bisherigen Inhalt der handlers.json wie deren Aufbau sein muss.

Innerhalb

"mimeTypes":{....}
"image/png":{"action":2,"handlers":[{"name":"eom","path":"/usr/bin/eom"}],"extensions":["png"]}

Anstelle von "path":"/usr/bin/eom" müsste sich auch "id":"eom.desktop" setzen lassen.

Bei dem "image/png" Beispiel ist "action 2" definiert, öffnen mit eom.

  • 0 Datei speichern

  • 1 Immer nachfragen

  • 2 Externe Anwendung verwenden

  • 3 Intern in Firefox öffnen

  • 4 Standardprogramm des Betriebssystems verwenden

Maranto

Anmeldungsdatum:
1. Mai 2026

Beiträge: 73

Weiter zur "handlers.json" und bspw. png.

Getestet mit Ubuntu 24.04.4 LTS, FF 153.0(Snap)

Über die handlers.json zu gehen funktioniert. Aktiviert png Eintrag in FF/Einstellungen.

Dann allerdings System Handler bei png wählen(der bietet dann eog(Bildbetrachter) + FF an). Manuelles Zuweisen über die json scheint nix zu bringen. Vllt. kann mal Jemand der *Ubuntu nutzt bei Gelegenheit berichten. Das Verhalten dürfte vmtl. Snap geschuldet sein.

Für mich sieht das Ganze eher nach einem FF Problem aus.

Noch ein png Bsp. https://github.com/test-images/png/blob/main/202105/cs-white-fff.png (Rechts auf Download)

Maranto

Anmeldungsdatum:
1. Mai 2026

Beiträge: 73

selbst gelöscht.


Nö, keine FF Sache.(war nicht auf

content-type: application/octet-stream x-content-type-options: nosniff

bezogen, sondern auf die FF MIME Behandlung. Vmtl. das Verhalten von FF unter den Umständen so gewollt und meine "Kunstgriffe" kontraproduktiv.

Antworten |