* ์ํธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด
(๊ธฐ์กด์ 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 ๋น์ทํ ์ฝ๋ ์์ฑ๋ ์ ์์)
๐น ์ฌ์ฉ ์:
๐ CSP ์๋ฐ ๊ฐ๋ฅ์ฑ ์ฆ๊ฐ, ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ
๐น ์ฌ์ฉ ์ ํจ:
๐ ์ฝ๋ ๋ ๋ณต์กํ์ง๋ง CSP ์๋ฐ ๊ฑฑ์ ์ค์ด๋ฆ
๐ --string-array false
- ์๋ ๋ชฉ์ : ์ฝ๋์ ์ฌ์ฉ๋ ๋ฌธ์์ด์ ๋ฐฐ์ด๋ก ๋ชจ์์ ์จ๊น๋๋ค.
- ์:↓ ๋๋ ํ ํ:
-
jsvar _0x1234 = ["hello"]; console.log(_0x1234[0]);
-
jsconsole.log("hello");
- ๋จ์ : CSP ์๋ฐ ๊ฐ๋ฅ์ฑ ๋์์ง (๋ฌธ์์ด๋ก ํจ์๋ช ์ ์กฐ๋ฆฝํ๊ฑฐ๋ eval๋ก ์คํํ ์ ์์)
๐น ์ฌ์ฉ ์:
๐ ๋๋ ํ ๊ฐ๋ ฅํ์ง๋ง CSP์ ์ถฉ๋ํ ์ ์์
๐น ์ฌ์ฉ ์ ํจ:
๐ ๋๋ ํ๋ ์ฝํด์ง์ง๋ง ์์ ์ฑ ๋์์ง
'๊ฐ๋ฐ ์ผ์ง ๐ฉโ๐ป' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋์ฐ์ Node.js ์ค์น ๋ฐฉ๋ฒ (1) | 2025.05.13 |
---|---|
CSP(Content Security Policy)์ ๋ํ์ฌ (4) | 2025.05.12 |
cursor ai / VSCode ์ฃผ์ ์๊น ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ (0) | 2025.05.12 |
cursor ai์์ ์คํ๋ง๋ถํธ ํ๋ก์ ํธ ์ฒ์ ์์ํ ๋ (0) | 2025.05.12 |
jQuery๋ก ๊ตฌํํ๋ ๋๋ฉด ์ ๊ฐ์ฒด ๋ฐฐ์น + ๋ง์ฐ์ค ์์น ๊ธฐ๋ฐ ์ค์ธ/์ค์์ ๊ธฐ๋ฅ (6) | 2025.05.12 |