์์ ์ํํธ์จ์ด ์ฌ๋จ(Free Software Foundation)์ ์จ๊ฒจ์ง ์๋ณ, ์์ง์ ์ถ์ , ์ฌ์ฉ์ ๋ฐ์ดํฐ ์ถ์ ๋ฑ ์น ์ฌ์ดํธ์์ JavaScript๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ์ํ์ผ๋ก๋ถํฐ ๋ณดํธํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ JShelter ํ๋ก์ ํธ๋ฅผ ์๊ฐํ์ต๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ GPLv3 ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. ์ด ์ถ๊ฐ ๊ธฐ๋ฅ์ Firefox, Google Chrome, Opera, Brave, Microsoft Edge ๋ฐ Chromium ์์ง ๊ธฐ๋ฐ์ ๊ธฐํ ๋ธ๋ผ์ฐ์ ์ฉ์ผ๋ก ์ค๋น๋์์ต๋๋ค.
์ด ํ๋ก์ ํธ๋ NLnet ์ฌ๋จ์ด ์๊ธ์ ์ง์ํ๋ ๊ณต๋ ๊ณํ์ผ๋ก ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค. NoScript ์ ๋์จ ์์ฑ์์ธ Giorgio Maone, J++ ํ๋ก์ ํธ ์ฐฝ๋ฆฝ์, JS-Shield ๋ฐ JavaScript Restrictor ์ ๋์จ ์์ฑ์๋ JShelter ๊ฐ๋ฐ์ ์ฐธ์ฌํ์ต๋๋ค. JavaScript Restrictor ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ํ๋ก์ ํธ์ ๊ธฐ์ด๋ก ์ฌ์ฉ๋ฉ๋๋ค.
JShelter๋ ์น์ฌ์ดํธ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ ์ ์๋ JavaScript ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ํ ์ผ์ข ์ ๋ฐฉํ๋ฒฝ์ผ๋ก ์๊ฐํ ์ ์์ต๋๋ค. ์ถ๊ฐ ๊ธฐ๋ฅ์ XNUMX๊ฐ์ง ๋ณดํธ ์์ค๊ณผ API ์ก์ธ์ค๋ฅผ ์ํ ์ ์ฐํ ๊ตฌ์ฑ ๋ชจ๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ ๋ฒจ XNUMX์ ๋ชจ๋ API์ ๋ํ ์ก์ธ์ค๋ฅผ ์์ ํ ํ์ฉํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋ ๋ฒจ์ ํ์ด์ง ์๋์ ๋ฐฉํดํ์ง ์๋ ์ต์ํ์ ์ฐจ๋จ์ ํฌํจํ๊ณ , ๋ ๋ฒ์งธ ๋ ๋ฒจ์ ์ฐจ๋จ๊ณผ ํธํ์ฑ ์ฌ์ด์ ๊ท ํ์ ์ด๋ฃจ๊ณ , ๋ค ๋ฒ์งธ ๋ ๋ฒจ์ ๋ถํ์ํ ๋ชจ๋ ๊ฒ์ ์๊ฒฉํ๊ฒ ์ฐจ๋จํฉ๋๋ค.
API ์ฐจ๋จ ์ค์ ์ ๊ฐ๋ณ ์ฌ์ดํธ์ ์ฐ๊ฒฐ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ผ๋ถ ์ฌ์ดํธ์์๋ ๋ณดํธ๊ฐ ๊ฐํ๋๊ณ ๋ค๋ฅธ ์ฌ์ดํธ์์๋ ๋นํ์ฑํ๋ ์ ์์ต๋๋ค. ๋ํ ํน์ JavaScript ๋ฉ์๋, ๊ฐ์ฒด, ์์ฑ ๋ฐ ํจ์๋ฅผ ์ ํ์ ์ผ๋ก ์ฐจ๋จํ๊ฑฐ๋ ๋ฐํ ๊ฐ์ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค(์: ์์คํ ์ ๋ํ ์๋ชป๋ ์ ๋ณด ์์ฑ). ๋ณ๋์ ๊ธฐ๋ฅ์ ํ์ด์ง๊ฐ ์ธ๋ถ ๋คํธ์ํฌ์ ๋ก์ปฌ ๋คํธ์ํฌ ๊ฐ์ ํ๋ก์๋ก ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ฉํ์ง ์๋ NBS(๋คํธ์ํฌ ๊ฒฝ๊ณ ๋ณดํธ) ๋ชจ๋์ ๋๋ค(๋ชจ๋ ๋๊ฐ๋ ์์ฒญ์ ๊ฐ๋ก์ฑ์ ๋ถ์ํฉ๋๋ค).
์ฐจ๋จ๋๊ฑฐ๋ ์ ํ๋ 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 - ๋ง์ดํฌ๋ก์ํคํ ์ฒ ์คํํฐ ๊ณต๊ฒฉ์ ์ํํฉ๋๋ค.
- WebWorker(window.Worker), SharedArrayBuffer(window.SharedArrayBuffer) - ๋ฐ์ดํฐ์ ์ก์ธ์คํ ๋ ์ง์ฐ์ ํ๊ฐํ๋ ๊ณต๊ฒฉ์ ์ํํฉ๋๋ค.
- Geolocation API(navigator.geolocation) - ์์น ์ ๋ณด์ ์ก์ธ์คํฉ๋๋ค(์ถ๊ฐํ๋ฉด ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์๊ณกํ ์ ์์).
- ๊ฒ์ํจ๋ API(navigator.getGamepads())๋ ์์คํ ์ ๊ฒ์ํจ๋๊ฐ ์๋์ง๋ฅผ ๊ณ ๋ คํ๋ ์๋ณ ๊ธฐํธ ์ค ํ๋์ ๋๋ค.
- ๊ฐ์ ํ์ค API, ํผํฉ ํ์ค API - ์๋ณ์ ์ํด ๊ฐ์ ํ์ค ์ฅ์น ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- window.name - ์ฌ์ดํธ ๊ฐ ๋์.
- navigator.sendBeacon - ์น ๋ถ์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru