Tipy | Javascript

Tip: Javascriptový hack schránky. Aneb když na webu zkopírujete něco úplně jiného

Každé malé dítě ví, že když na webu něco zkopíruje do systémové schránky, tak to tam prostě je a může to kdykoliv a kamkoliv zase vložit. Skutečnost je ale mnohem složitější, protože tu máme Javascript a potenciální záškodníky, kteří mohou obsah schránky pozměnit.

Podívejte se třeba na tento výrok níže. Vypadá zcela neškodně, že? Zkuste jej ale ručně zkopírovat a někam vložit:

Bobík s Pinďou vaří guláš.

Nejspíše uvidíte úplně jiný text. Pokud tedy nepoužíváte nějaký starý (třeba IE) nebo speciální prohlížeč s omezenou podporou moderního Javascriptu.

Podívejte se na video:

Falešná kočička

Podobně si můžeme pohrát i s dalšími typy dat. Takže když odstavec textu nahradím obrázkem a o něco delším kódem, docílím efektu jako ve videu níže, ve kterém z webové stránky namísto fotky hezké kočičky zkopíruji ošklivého Kubu.

Nebezpečný vtípek s příkazovou řádkou

Toto byly ještě neškodné vtípky, dejme ale tomu, že na webu hledáte návod, jak udělat něco složitějšího na počítači, přičemž součástí manuálu bude nějaký příkaz, který máte vložit do příkazové řádky.

Třeba by to mohl být neškodný příkaz pro výpis obsahu adresáře na Windows:

dir

Jelikož ho nechcete ručně opisovat, abyste si ušetřili čas, zkopírujete jej a rovnou vložíte do příkazové řádky. A opět, pokud používáte současný webový prohlížeč bez dalších úprav a stejně tak prehistorickou Příkazovou řádku, vloží se do ní úplně jiný příkaz, který třeba může začít mazat soubory, instalovat malware a tak podobně.

Podívejte se na video:

Ke všemu, a to je zdaleka nejhorší, příkaz se rovnou i zpracuje bez potřeby klepnutí na ENTER, jeho součástí je totiž na konci i znak pro zalomení řádku.

Starou Příkazovou řádku už nepoužívejte!

O důvod více, pro používat PowerShell anebo v případě Windows 11 jeho nový Terminal. Zatímco PowerShell počká i tak na ENTER, Terminal u víceřádkového textu zobrazí varování s náhledem a zeptá se, jestli chcete obsah schránky opravdu vložit.

c2a475f7-f873-4ca6-96e9-8621e525832b
Pokus o vložení víceřádkového textu v novém Windows Terminalu

Jak jsme to udělali? Stačil jeden řádek kódu

Podobná srandička přitom není žádný sofistikovaný hacking, ale naprosto standardní práce s rozhraním Javascriptu Clipboard API. Napoví primitivní kódy níže.

První ukázka:

<p oncopy="navigator.clipboard.writeText('Už máte Živě.cz Premium?')">
    Bobík s Pinďou vaří guláš.
</p>

Druhá ukázka:

<p oncopy="navigator.clipboard.writeText('ping google.com\n')">
    dir
</p>

Jednoduše jsem u jednotlivých HTML objektů nastavil, co se má stát po události oncopy, tedy po vyvolání požadavku na zkopírování objektu (v tomto případě jeho textu). Byla to instrukce navigator.cliboard.writeText, kdy jsem pomocí Javascriptu do schránky vložil úplně jiný obsah, než si myslí návštěvník stránky.

U příkladu se zdrojovým kódem jsem pak alternativní text příkazu zakončil zástupným znakem zalomení řádku \n.

Pokud tedy často kopírujete různé příkazy z webových manuálů, pro klid v duši používejte takové textové terminály, které nabízejí alespoň elementární ochranu při vkládání textu ze systémové schránky.

Diskuze (17) Další článek: JWST život ve vesmíru nenajde. Jeho nástupce možná

Témata článku: , , , , , , , , , , , , , , , , , , , , , , ,