Π€ΠΎΠ½Π΄Π°ΡΠΈΡΡΠ° Π·Π° ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½ ΡΠΎΡΡΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° JShelter, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° Π΄ΠΎΠ±Π°Π²ΠΊΠ° Π·Π° Π±ΡΠ°ΡΠ·ΡΡ Π·Π° Π·Π°ΡΠΈΡΠ° ΡΡΠ΅ΡΡ Π·Π°ΠΏΠ»Π°Ρ ΠΈ, ΠΊΠΎΠΈΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° JavaScript Π½Π° ΡΠ΅Π±ΡΠ°ΠΉΡΠΎΠ²Π΅, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠΊΡΠΈΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈ Π½Π°ΡΡΡΠΏΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π· GPLv3. ΠΠΎΠ±Π°Π²ΠΊΠ°ΡΠ° Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° Π·Π° Firefox, Google Chrome, Opera, Brave, Microsoft Edge ΠΈ Π΄ΡΡΠ³ΠΈ Π±ΡΠ°ΡΠ·ΡΡΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Chromium.
ΠΡΠΎΠ΅ΠΊΡΡΡ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΊΠ°ΡΠΎ ΡΡΠ²ΠΌΠ΅ΡΡΠ½Π° ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²Π°, ΡΠΈΠ½Π°Π½ΡΠΈΡΠ°Π½Π° ΠΎΡ ΡΠΎΠ½Π΄Π°ΡΠΈΡ NLnet. Giorgio Maone, ΡΡΠ·Π΄Π°ΡΠ΅Π» Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠ°ΡΠ° 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() ΠΈ AnalyserNode.getFloatFrequencyData()) - ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΡΠ΅Π· Π°Π½Π°Π»ΠΈΠ· Π½Π° Π°ΡΠ΄ΠΈΠΎ ΡΠΈΠ³Π½Π°Π»ΠΈ.
- WebGLRenderingContext - ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ ΡΡΠ΅Π· Π°Π½Π°Π»ΠΈΠ· Π½Π° Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ Π½Π° Π³ΡΠ°ΡΠΈΡΠ½ΠΈΡ ΡΡΠ΅ΠΊ ΠΈ GPU.
- MediaDevices.prototype.enumerateDevices - ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΡΠ΅Π· ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΊΠ°ΠΌΠ΅ΡΠ°ΡΠ° ΠΈ ΠΌΠΈΠΊΡΠΎΡΠΎΠ½Π°.
- navigator.deviceMemory, navigator.hardwareConcurrency - ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Ρ Π°ΡΠ΄ΡΠ΅ΡΠ°.
- XMLHttpRequest (XHR) - ΠΏΡΠ΅Ρ Π²ΡΡΠ»Ρ ΡΡΠ±ΡΠ°Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΊΡΠΌ Π²ΡΠ½ΡΠ΅Π½ ΡΡΡΠ²ΡΡ, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ΡΠ΅ Π·Π°ΡΠ΅Π΄ΠΈ.
- ArrayBuffer - ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΈ Spectre Π°ΡΠ°ΠΊΠΈ.
- WebWorker (window.Worker), SharedArrayBuffer (window.SharedArrayBuffer) - ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π°ΡΠ°ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΎΡΠ΅Π½ΡΠ²Π°Ρ Π·Π°Π±Π°Π²ΡΠ½ΠΈΡΡΠ° ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π΄Π°Π½Π½ΠΈ.
- API Π·Π° Π³Π΅ΠΎΠ»ΠΎΠΊΠ°ΡΠΈΡ (navigator.geolocation) - Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Π΄ΠΎΠ±Π°Π²ΠΊΠ°ΡΠ° Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ·ΠΊΡΠΈΠ²ΠΈΡΠ΅ Π²ΡΡΠ½Π°ΡΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ).
- API Π½Π° Π³Π΅ΠΉΠΌΠΏΠ°Π΄Π° (navigator.getGamepads()) Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ Π·Π½Π°ΡΠΈ, ΠΊΠΎΠΉΡΠΎ ΠΎΡΡΠΈΡΠ° Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° Π³Π΅ΠΉΠΌΠΏΠ°Π΄ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°.
- API Π·Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΡΠ΅Π°Π»Π½ΠΎΡΡ, API Π·Π° ΡΠΌΠ΅ΡΠ΅Π½Π° ΡΠ΅Π°Π»Π½ΠΎΡΡ - ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ Π·Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΡΠ΅Π°Π»Π½ΠΎΡΡ Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ.
- window.name - ΡΠ΅ΡΠΎΠ²Π΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°ΠΉΡΠΎΠ²Π΅.
- navigator.sendBeacon - ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ Π·Π° ΡΠ΅Π± Π°Π½Π°Π»ΠΈΠ·ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru