Π€ΠΎΠ½Π΄ БПО прСдставил Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ JShelter для ограничСния JavaScript API

Π€ΠΎΠ½Π΄ свободного ПО прСдставил ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ JShelter, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ ΡƒΠ³Ρ€ΠΎΠ·, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈ использовании JavaScript Π½Π° сайтах, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ, отслСТиваниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΉ ΠΈ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GPLv3. Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΎ для Firefox, Google Chrome, Opera, Brave, Microsoft Edge ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° Chromium.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ развиваСтся ΠΊΠ°ΠΊ совмСстная ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Π°, финансируСмая Ρ„ΠΎΠ½Π΄ΠΎΠΌ NLnet Foundation. К Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ JShelter Π² Ρ‚ΠΎΠΌ числС присоСдинился Π”ΠΆΠΎΡ€ΠΆΠΈΠΎ МаонС (Giorgio Maone), ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ дополнСния NoScript, Π° Ρ‚Π°ΠΊΠΆΠ΅ основатСли ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° J++ ΠΈ Π°Π²Ρ‚ΠΎΡ€Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ JS-Shield ΠΈ JavaScript Restrictor. Π’ качСствС основы Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° использовано Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ JavaScript Restrictor.

JShelter ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ мСТсСтСвого экрана для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… интСрфСйсов JavaScript, доступных сайтам ΠΈ web-прилоТСниям. Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ прСдоставляСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ уровня Π·Π°Ρ‰ΠΈΡ‚Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅ΠΆΠΈΠΌ Π³ΠΈΠ±ΠΊΠΎΠΉ настройки доступа ΠΊ 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) — ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π°Ρ‚Π°ΠΊ, ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€ΠΈ доступС ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ.
  • Geolocation API (navigator.geolocation) — доступ ΠΊ свСдСниям ΠΎ мСстополоТСнии (Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ позволяСт ΠΈΡΠΊΠ°ΠΆΠ°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅).
  • Gamepad API (navigator.getGamepads()) — ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² систСмС Π³Π΅ΠΉΠΌΠΏΠ°Π΄Π°.
  • Virtual Reality API, Mixed Reality API — использованиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² устройств Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.
  • window.name — мСТсайтовыС ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ.
  • navigator.sendBeacon — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для web-Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru