๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ ์ผ์ง€ ๐Ÿ‘ฉ‍๐Ÿ’ป

spring boot) js ํŒŒ์ผ ๋‚œ๋…ํ™” ๋ฐฉ๋ฒ•

by chuyj15 2025. 5. 12.
728x90
๋ฐ˜์‘ํ˜•
SMALL


* ์•”ํ˜ธํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‹ค์šด

(๊ธฐ์กด์— node.js๊ฐ€ ์„ค์น˜๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค. node.js ์„ค์น˜ ๋ฐฉ๋ฒ• : https://chuyj15.tistory.com/41)

cmd์ฐฝ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰, ์•„๋ž˜๋ช…๋ น์–ด ์‹คํ–‰

npm install -g javascript-obfuscator

( npm install -g ๋ช…๋ น์–ด๋Š” ์ „์—ญ(Global) ์„ค์น˜๋ฅผ ์˜๋ฏธ)

โœ… ์ „์—ญ ์„ค์น˜ ์œ„์น˜

์ „์—ญ ์„ค์น˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ ๊ฒฝ๋กœ์— ์„ค์น˜๋ฉ๋‹ˆ๋‹ค:

๐Ÿ”น Windows ๊ธฐ์ค€

  • ํŒจํ‚ค์ง€ ์œ„์น˜:
    C:\Users\<์‚ฌ์šฉ์ž์ด๋ฆ„>\AppData\Roaming\npm\node_modules

  • ์‹คํ–‰ ํŒŒ์ผ ์œ„์น˜ (๋ช…๋ น์–ด๋กœ ๋“ฑ๋ก๋จ):์ด ํด๋”๊ฐ€ PATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋“ฑ๋ก๋˜์–ด ์žˆ์–ด์„œ javascript-obfuscator ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์•„๋ฌด ๋ฐ์„œ๋‚˜ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒ๋‹ˆ๋‹ค.
     
    C:\Users\<์‚ฌ์šฉ์ž์ด๋ฆ„>\AppData\Roaming\npm

 

* ๋‚œ๋…ํ™” ํ›„, ๋‚œ๋…ํ™”๋œ ํŒŒ์ผ js-dist ํด๋”๋กœ ์ด๋™

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฐ IDE์˜ ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜ ๋ช…๋ น์–ด ์‹คํ–‰

(๋ณดํ†ต ์‹คํ–‰ ์œ„์น˜๋Š” build.gradle์ด๋‚˜ pom.xml ํŒŒ์ผ์ด ์žˆ๋Š” ํด๋”)

cmd /c "javascript-obfuscator ./src/main/resources/static/js --output ./src/main/resources/static/js-dist --compact true --control-flow-flattening true --string-array true --string-array-encoding base64 --identifier-names-generator mangled --transform-object-keys true"

๊ทธ๋Ÿฌ๋ฉด ์ด๋ ‡๊ฒŒ js-dict ํด๋” ์•„๋ž˜์— ์•”ํ˜ธํ™”๋œ jsํŒŒ์ผ๋“ค์ด ์ƒ์„ฑ๋œ๋‹ค.

* Controller  ํŒŒ์ผ ์ˆ˜์ •

 ๋‚œ๋…ํ™”๋œ jsํŒŒ์ผ์ด ๋ชจ์—ฌ์žˆ๋Š” ๊ณณ์ธ /js-dict ์œ„์น˜๋ฅผ model์— ๋„ฃ์–ด์คŒ

@GetMapping("/device-control")
    public String deviceControl(Model model) {
        String jsPrefix = "/js-dist";
        model.addAttribute("jsPrefix", jsPrefix);
        return "pages/device/device-control";
    }

 

* html ํŒŒ์ผ ์ˆ˜์ •

<script type="module" th:src="@{${jsPrefix + '/pages/device/device-control.js'}}"></script>

 

 


โœ… 2. ๋‚œ๋…ํ™” ์˜ต์…˜ ์„ค๋ช…


๐Ÿ“Œ --control-flow-flattening false

  • ์›๋ž˜ ๋ชฉ์ : ์ฝ”๋“œ ํ๋ฆ„์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ์˜ˆ: if, switch, while ๋“ฑ์„ ์ด์ƒํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  • ๋‹จ์ : CSP ์œ„๋ฐ˜ ๊ฐ€๋Šฅ (๊ฐ„์ ‘ ์‹คํ–‰์ด๋‚˜ eval ๋น„์Šทํ•œ ์ฝ”๋“œ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Œ)

๐Ÿ”น ์‚ฌ์šฉ ์‹œ:

--control-flow-flattening true

๐Ÿ‘‰ CSP ์œ„๋ฐ˜ ๊ฐ€๋Šฅ์„ฑ ์ฆ๊ฐ€, ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ

 

๐Ÿ”น ์‚ฌ์šฉ ์•ˆ ํ•จ:

--control-flow-flattening false

๐Ÿ‘‰ ์ฝ”๋“œ ๋œ ๋ณต์žกํ•˜์ง€๋งŒ CSP ์œ„๋ฐ˜ ๊ฑฑ์ • ์ค„์–ด๋“ฆ


๐Ÿ“Œ --string-array false

  • ์›๋ž˜ ๋ชฉ์ : ์ฝ”๋“œ์— ์‚ฌ์šฉ๋œ ๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด๋กœ ๋ชจ์•„์„œ ์ˆจ๊น๋‹ˆ๋‹ค.
  • ์˜ˆ:↓ ๋‚œ๋…ํ™” ํ›„:
  • js
    var _0x1234 = ["hello"]; console.log(_0x1234[0]);
  • js
    console.log("hello");
  • ๋‹จ์ : CSP ์œ„๋ฐ˜ ๊ฐ€๋Šฅ์„ฑ ๋†’์•„์ง (๋ฌธ์ž์—ด๋กœ ํ•จ์ˆ˜๋ช…์„ ์กฐ๋ฆฝํ•˜๊ฑฐ๋‚˜ eval๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ)

๐Ÿ”น ์‚ฌ์šฉ ์‹œ:

--string-array true

๐Ÿ‘‰ ๋‚œ๋…ํ™” ๊ฐ•๋ ฅํ•˜์ง€๋งŒ CSP์™€ ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ์Œ

 

๐Ÿ”น ์‚ฌ์šฉ ์•ˆ ํ•จ:

--string-array false

๐Ÿ‘‰ ๋‚œ๋…ํ™”๋Š” ์•ฝํ•ด์ง€์ง€๋งŒ ์•ˆ์ •์„ฑ ๋†’์•„์ง

 

728x90
๋ฐ˜์‘ํ˜•
LIST