Π€ΠΎΠ½Π΄Π°ΡΠΈΡΠ°ΡΠ° Π·Π° ΡΠ»ΠΎΠ±ΠΎΠ΄Π΅Π½ ΡΠΎΡΡΠ²Π΅Ρ Π³ΠΎ ΠΏΡΠ΅ΡΡΡΠ°Π²ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ JShelter, ΠΊΠΎΡ ΡΠ°Π·Π²ΠΈΠ²Π° Π΄ΠΎΠ΄Π°ΡΠΎΠΊ Π·Π° ΠΏΡΠ΅Π»ΠΈΡΡΡΠ²Π°Ρ Π·Π° Π·Π°ΡΡΠΈΡΠ° ΠΎΠ΄ Π·Π°ΠΊΠ°Π½ΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΡΠ°Π²ΡΠ²Π°Π°Ρ ΠΏΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° JavaScript Π½Π° Π²Π΅Π±-Π»ΠΎΠΊΠ°ΡΠΈΠΈ, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ ΡΠΊΡΠΈΠ΅Π½Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°, ΡΠ»Π΅Π΄Π΅ΡΠ΅ Π΄Π²ΠΈΠΆΠ΅ΡΠ° ΠΈ Π°ΠΊΡΠΌΡΠ»Π°ΡΠΈΡΠ° Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠΎΠ΄ΠΎΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° GPLv3. ΠΠΎΠ΄Π°ΡΠΎΠΊΠΎΡ Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ Π·Π° Firefox, Google Chrome, Opera, Brave, Microsoft Edge ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΡΠ΅Π»ΠΈΡΡΡΠ²Π°ΡΠΈ Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΌΠΎΡΠΎΡΠΎΡ Chromium.
ΠΡΠΎΠ΅ΠΊΡΠΎΡ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΊΠ°ΠΊΠΎ Π·Π°Π΅Π΄Π½ΠΈΡΠΊΠ° ΠΈΠ½ΠΈΡΠΈΡΠ°ΡΠΈΠ²Π° ΡΠΈΠ½Π°Π½ΡΠΈΡΠ°Π½Π° ΠΎΠ΄ Π€ΠΎΠ½Π΄Π°ΡΠΈΡΠ°ΡΠ° ΠΠΠ½Π΅Ρ. ΠΠΎΡΡΠΎ ΠΠ°ΠΎΠ½Π΅, ΠΊΡΠ΅Π°ΡΠΎΡΠΎΡ Π½Π° Π΄ΠΎΠ΄Π°ΡΠΎΠΊΠΎΡ NoScript, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΎΡΠ½ΠΎΠ²Π°ΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ J++ ΠΈ Π°Π²ΡΠΎΡΠΈΡΠ΅ Π½Π° Π΄ΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ JS-Shield ΠΈ JavaScript Restrictor, ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΠΈΠΊΠ»ΡΡΠΈΡΠ° Π½Π° ΡΠ°Π·Π²ΠΎΡΠΎΡ Π½Π° JShelter. ΠΠ°ΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π° Π·Π° Π½ΠΎΠ²ΠΈΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π΄ΠΎΠ΄Π°ΡΠΎΠΊΠΎΡ JavaScript Restrictor.
JShelter ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΌΠ΅ΡΠ° ΠΊΠ°ΠΊΠΎ Π΅Π΄Π΅Π½ Π²ΠΈΠ΄ Π·Π°ΡΡΠΈΡΠ΅Π½ ΡΠΈΠ΄ Π·Π° JavaScript ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΈ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π·Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅. ΠΠΎΠ΄Π°ΡΠΎΠΊΠΎΡ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΡΠ΅ΡΠΈΡΠΈ Π½ΠΈΠ²ΠΎΠ° Π½Π° Π·Π°ΡΡΠΈΡΠ°, ΠΊΠ°ΠΊΠΎ ΠΈ ΡΠ»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ API. ΠΠΈΠ²ΠΎΡΠΎ Π½ΡΠ»Π° ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΡΠΈΡΠ΅ API, ΠΏΡΠ²ΠΎΡΠΎ Π²ΠΊΠ»ΡΡΡΠ²Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ ΡΡΠΎ Π½Π΅ ΡΠ° Π½Π°ΡΡΡΡΠ²Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅, Π²ΡΠΎΡΠΎΡΠΎ Π½ΠΈΠ²ΠΎ Π±Π°Π»Π°Π½ΡΠΈΡΠ° ΠΏΠΎΠΌΠ΅ΡΡ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ΡΠΎ ΠΈ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡΠ°, Π° ΡΠ΅ΡΠ²ΡΡΠΎΡΠΎ Π½ΠΈΠ²ΠΎ Π²ΠΊΠ»ΡΡΡΠ²Π° ΡΡΡΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ΅ ΡΡΠΎ Π΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ.
ΠΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π·Π° Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ Π½Π° API ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π°Ρ ΡΠΎ ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½ΠΈ Π»ΠΎΠΊΠ°ΡΠΈΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΡΡΠΈΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΡΠ°ΠΊΠ½Π΅ Π·Π° Π½Π΅ΠΊΠΎΠΈ Π»ΠΎΠΊΠ°ΡΠΈΠΈ, Π° Π·Π° Π΄ΡΡΠ³ΠΈ Π΄Π° ΡΠ΅ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈ. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅Π»Π΅ΠΊΡΠΈΠ²Π½ΠΎ Π΄Π° Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ JavaScript ΠΌΠ΅ΡΠΎΠ΄ΠΈ, ΠΎΠ±ΡΠ΅ΠΊΡΠΈ, ΡΠ²ΠΎΡΡΡΠ²Π° ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ ΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄ΡΠ²Π°ΡΠ΅ Π»Π°ΠΆΠ½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ). ΠΠΎΡΠ΅Π±Π½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π΅ ΡΠ΅ΠΆΠΈΠΌΠΎΡ NBS (Network boundary shield), ΠΊΠΎΡ Π½Π΅ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΏΡΠ΅Π»ΠΈΡΡΡΠ²Π°ΡΠΎΡ ΠΊΠ°ΠΊΠΎ ΠΏΡΠΎΠΊΡΠΈ ΠΏΠΎΠΌΠ΅ΡΡ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΈΡΠ΅ ΠΌΡΠ΅ΠΆΠΈ (ΡΠΈΡΠ΅ ΠΏΠΎΡΠ΄ΠΎΠ²Π½ΠΈ Π±Π°ΡΠ°ΡΠ° ΡΠ΅ ΠΏΡΠ΅ΡΡΠ΅ΡΠ½Π°ΡΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ).
ΠΠ»ΠΎΠΊΠΈΡΠ°Π½ΠΈ ΠΈΠ»ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ API:
- window.Date, window.performance.now(), window.PerformanceEntry, Event.prototype.timeStamp, Gamepad.prototype.timestamp ΠΈ VRFrameData.prototype.timestamp - ΡΠΎΡΠ½ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΡΠΊΠΎΡΠΈΡΡΠΈ Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΠ²Π°Π°Ρ ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠ°Ρ Π½Π°ΠΏΠ°Π΄ΠΈ ΠΎΠ΄ ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈΠΎΡ ΠΊΠ°Π½Π°Π» .
- HTMLCanvasElement (canvas.toDataURL(), canvas.toBlob(), CanvasRenderingContext2D.getImageData, OffscreenCanvas.convertToBlob()) - ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ Π½Π° Π³ΡΠ°ΡΠΈΡΠΊΠΈΠΎΡ ΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΏΡΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ.
- AudioBuffer ΠΈ AnalyserNode (AudioBuffer.getChannelData(), AudioBuffer.copyFromChannel(), AnalyserNode.getByteTimeDomainData(), AnalyserNode.getFloatTimeDomainData(), AnalyserNode.getByteFrequencyData. Π½Π° Π°ΡΠ΄ΠΈΠΎ ΡΠΈΠ³Π½Π°Π»ΠΈ.
- WebGLRenderingContext - ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ° ΠΏΡΠ΅ΠΊΡ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ Π½Π° Π³ΡΠ°ΡΠΈΡΠΊΠΈΠΎΡ ΡΡΠ΅ΠΊ ΠΈ Π³ΡΠ°ΡΠΈΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ.
- MediaDevices.prototype.enumerateDevices - ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ° ΡΠΎ Π΄ΠΎΠ±ΠΈΠ²Π°ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΈ ΠΈΠΌΠΈΡΠ° Π½Π° ΠΊΠ°ΠΌΠ΅ΡΠ°ΡΠ° ΠΈ ΠΌΠΈΠΊΡΠΎΡΠΎΠ½ΠΎΡ.
- navigator.deviceMemory, navigator.hardwareConcurrency - Π΄ΠΎΠ±ΠΈΠ²Π°ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° Ρ Π°ΡΠ΄Π²Π΅ΡΠΎΡ.
- XMLHttpRequest (XHR) - Π³ΠΈ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π° ΡΠΎΠ±ΡΠ°Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π° Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ΅Π½ ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ΅ Π²ΡΠΈΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°.
- ArrayBuffer - ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΠ½ΡΠΊΠΈ Π½Π°ΠΏΠ°Π΄ΠΈ Spectre.
- WebWorker (window.Worker), SharedArrayBuffer (window.SharedArrayBuffer) - ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π°ΠΏΠ°Π΄ΠΈ ΠΊΠΎΠΈ Π³ΠΈ ΠΎΡΠ΅Π½ΡΠ²Π°Π°Ρ Π΄ΠΎΡΠ½Π΅ΡΠ°ΡΠ° ΠΏΡΠΈ ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ.
- API Π·Π° Π³Π΅ΠΎΠ»ΠΎΠΊΠ°ΡΠΈΡΠ° (navigator.geolocation) - ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° Π»ΠΎΠΊΠ°ΡΠΈΡΠ°ΡΠ° (Π΄ΠΎΠ΄Π°ΡΠΎΠΊΠΎΡ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° Π³ΠΈ ΠΈΡΠΊΡΠΈΠ²ΠΈΡΠ΅ Π²ΡΠ°ΡΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ).
- Gamepad API (navigator.getGamepads()) Π΅ Π΅Π΄Π΅Π½ ΠΎΠ΄ Π·Π½Π°ΡΠΈΡΠ΅ Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ° ΡΡΠΎ Π³ΠΎ Π·Π΅ΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΏΡΠΈΡΡΡΡΠ²ΠΎΡΠΎ Π½Π° gamepad Π²ΠΎ ΡΠΈΡΡΠ΅ΠΌΠΎΡ.
- Virtual Reality API, Mixed Reality API - ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΡΠ΅Π΄ΠΎΡ Π·Π° Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΡΠ΅Π°Π»Π½ΠΎΡΡ Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°.
- ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ.ΠΈΠΌΠ΅ - ΠΏΡΠΎΡΠ΅ΠΊΡΠ²Π°ΡΠ΅ Π½Π° Π²ΠΊΡΡΡΠ΅Π½ΠΈ Π»ΠΎΠΊΠ°ΡΠΈΠΈ.
- navigator.sendBeacon - ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° Π²Π΅Π±-Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ°.
ΠΠ·Π²ΠΎΡ: opennet.ru