spring boot) js νμΌ λλ ν λ°©λ²
* μνΈν λΌμ΄λΈλ¬λ¦¬ λ€μ΄
(κΈ°μ‘΄μ 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μ μΆ©λν μ μμ
πΉ μ¬μ© μ ν¨:
π λλ νλ μ½ν΄μ§μ§λ§ μμ μ± λμμ§