O webu
Jak zabránit kopírování

Ze své podstaty je webová stránka velmi lehce zkopírovatelná. Veškerý obsah (texty, obrázky, videa), které se mají zobrazit návštěvníkovi, si totiž jeho prohlížeč musí nejprve stáhnout (uložit na disk / do operační paměti).

Zkopírování celé stránky proto v podstatě proběhne při každém jejím načtení. A proto je jediná možnost, jak kopírování zabránit, nedávat obsah na internet.

Existují ale způsoby, jak kopírování ztížit nebo použít ve svůj prospěch

Kopírování textu

Asi nejjednodušší je zkopírovat text. Označit ho myší a stisknout Ctrl + C. Nebo na něj kliknout pravým tlačítkem a zvolit Kopírovat.

Ve snaze kopírování zabránit proto může někoho napadnout zakázat:

  • Klávesovou zkratku Ctrl + C (popř. Ctrl + Insert),
  • zakázat pravé tlačítko myši, které vyvolává kontextovou nabídku,
  • zakázat označování textu na stránce.

JS blokující kopírování

Pro zamezení kopírování jde vystornovat události oncopy a oncut:

<body oncopy="return false" oncut="return false">

Zakázat kontextovou nabídku zase přes oncontextmenu:

<body oncontextmenu="return false">

Ukázka se všemi těmito překážkami.

Zásadní problém těchto blokací (kromě otravného nabourání výchozích funkcí prohlížeče) je skutečnost, že všechny může uživatel vypnout prostým zakázáním JS. Případně si stránku uložit na disk a tam text získat ze zdrojového kódu.

Text jako obrázek

Všechny tyto problémy by teoreticky řešil text, který se umístí do obrázku. Problém je, že takové řešení je silně nepřístupné (vyhledávače nejspíš text z obrázku analysovat nebudou).

Kromě toho ani takový postup nezabrání použít na obrázek optické rozpoznávání znaků.

Jak kopírování textu využít

Zajímavé řešení je, když se k většímu množství označeného textu přidá „Zdroj: http://example.com/stranka“.

  • Při kopírování pár slov to nijak neobtěžuje (zdroj se nepřidá).
  • Zkopírováním získá stránka zpětný odkaz.
  • Může to potěšit i návštěvníka, který by zdroj chtěl uvádět.

Kopírování obrázků

V případě obrázků může rovněž pro málo zkušené návštěvníky fungovat blokace pravého tlačítka případně překrytí dalším průhledným obrázkem (nebo vložení obrázku jako CSS pozadí).

Překrytí obrázku

Logo je překryto absolutně posicovaným <div>em. Kontextová nabídka pro obrázek by se neměla objevovat.

Zkušenější člověk to snadno obejde. Buď si vypne CSS, uloží celou stránku s obrázky, najde adresu obrázku ve zdrojovém kódu a tak dále.

Řešení není ani nepřístupný obsah typu Flashe. Když už obrázek na obrazovce je, není problém ji vyfotit klávesou Print Screen. Případně skutečně vyfotit fotoaparátem (ideálně ze stativu).

Vodoznak

Možný způsob, jak alespoň trochu využít kopírování obrázků, je jejich označení vodoznakem / adresou webu. Řešení v PHP.

Hotlinkování obrázků

Hotlinkování je technika, kdy se cizí objekt (obrázek, video, JavaScript) připojí na vlastní web. Nevýhodné je být ten, z jehož webu se obrázky připojují jinam.

Nevýhodné je to z důvodu, že to majiteli v zásadě nic nepřináší, ale stojí ho to přenosovou kapacitu. Využít hotlinkování ve svůj prospěch je možné nabídnutí jiného obsahu obrázku (reklamy na svůj web) pro návštěvy z cizího webu.

Využití .htaccess

Zakázat zobrazování obrázků mimo vlastní web je možné přes:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ novy-obrazek.jpg [NC,R,L]

Druhý řádek zajišťuje, aby se obrázek řádně načetl i při vypnutém refereru.

Kopírování JavaScriptu

Opět: Má-li se na stránce provést JS kód, musí se stáhnout a prohlížeč ho pochopit. Jediná možnost, jak někomu jinému ztížit využívání skriptu, je jeho znečitelnění (tzv. obfuskace). Tam spadá například:

  1. Odstranění formátování kódu (mezer a tabulátorů),
  2. odstranění vysvětlujících komentářů,
  3. přejmenování identifikátorů (názvu proměnných a funkcí) na nesrozumitelné nesmysly,
  4. vytvoření samoúčelných funkcí, které různé komprimují kód.

Existují různé online nástroje (nebo doplněk do Firefoxu) pro opětovné zkrášlení kódu. Ovšem komentáře a smysluplné názvy proměnných a funkcí plně zrekonstruovat nelze.

Doplnění názvů proměnných (a mnohdy úspěšně) zkouší dělat nástroj JS NICE.

Použití několika různých obfuskátorů vytvoří tak nečitelný kód, že se často spíš vyplatí napsat ho znovu od nuly. Takto může vypadat funkce pro přepínání tříd.

O dekódování obfuskovaného kódu jsou zajímavé postřehy na diskusi.

Obfuskátory JavaScriptu

Kompilátory, co dokáží výrazně zmenšit datovou velikost skriptu při zachování stejného výkonu.

Další nástroje se snaží primárně kódu snížit čitelnost. Třeba i na úkor výkonu nebo datové velikosti.

Kopírování HTML a CSS kódu

Co se týče HTML a CSS kódu, je situace dost složitá. V zásadě lze jen obfuskovat názvy identifikátorů a tříd. Jinak je možné odstranit jen komentáře a bílé znaky (mezery a tabulátory), třeba nástrojem Clean CSS — ty je ale možné snadno navrátit (v HTML i v CSS). Umí to i Texy! nebo HTML Purifier.

Zakódování CSS

CSS jde trochu znečitelnit zakódováním do Base64 při použití data URI, jde použít <link> nebo @import (živé ukázky):

@import url("data:text/css;base64,zakódovanýŘetězec");
<link rel="stylesheet" type="text/css" href="data:text/css;base64,zakódovanýŘetězec">

Ale má to nevýhody:

  • každý vidí, čím je zakódováno,
  • funguje až v IE 8,
  • kód je delší,
  • vývojářské nástroje použité styly odhalí,
  • při použití @importu musí být data v jednom řádku, dlouhý řádek přitahuje pozornost,
  • v některých prohlížečích mohou být problémy s obrázky na pozadí (možná při použití relativních cest).