item 85 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
- ์๋ฐ์ ์ญ์ง๋ ฌํ๋ ๋ช ๋ฐฑํ๊ณ ํ์กดํ๋ ์ํ์ด๋ค. ์ด ๊ธฐ์ ์ ์ง๊ธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ง ์ ํน์, ์๋ฐ ํ๋ถ ์์คํ (RMI(Remote Method Invocation), JMX(Java Management Extension), JMS(Java Messaging System) ๊ฐ์)์ ํตํด ๊ฐ์ ์ ์ผ๋ก ์ฐ์ด๊ณ ์๊ธฐ ๋๋ฌธ ์ด๋ค. ์ ๋ขฐํ ์ ์๋ ์คํธ๋ฆผ์ ์ญ์ง๋ ฌํํ๋ฉด ์๊ฒฉ ์ฝ๋ ์คํ(remote code execution, RCE), ์๋น์ค ๊ฑฐ๋ถ(denial-of-service, DoS) ๋ฑ์ ๊ณต๊ฒฉ์ผ๋ก ์ด์ด์ง ์ ์๋ค. ์๋ชปํ ๊ฒ ์ ๋ฌด๊ฒ๋ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ ์ด๋ฐ ๊ณต๊ฒฉ์ ์ทจ์ฝํด์ง ์ ์๋ค
static byte[] bomb() {
Set<Object> root = new HashSet<>();
Set<Object> s1 = root;
Set<Object> s2 = new HashSet<>();
for (int i = 0; i < 100; i++) {
Set<Object> t1 = new HashSet<>();
Set<Object> t2 = new HashSet<>();
t1.add("foo"); // t1์ t2์ ๋ค๋ฅด๊ฒ ๋ง๋ ๋ค.
s1.add(t1); s1.add(t2);
s2.add(t1); s2.add(t2); s1 = t1;
s2 = t2;
}
return serialize(root); // ๊ฐ๊ฒฐํ๊ฒ ํ๊ธฐ ์ํด ์ด ๋ฉ์๋์ ์ฝ๋๋ ์๋ตํจ
}
1 ์ด ๊ฐ์ฒด ๊ทธ๋ํ๋ 201๊ฐ์ HashSet ์ธ์คํด์ค๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ทธ ๊ฐ๊ฐ์ 3๊ฐ ์ด ํ์ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ๊ฐ๋๋ค. 2 ๋ฌธ์ ๋ HashSet ์ธ์คํด์ค ๋ฅผ ์ญ์ง๋ ฌํํ๋ ค๋ฉด ๊ทธ ์์๋ค์ ํด์์ฝ๋๋ฅผ ๊ณ์ฐํด์ผ ํ๋ค๋ ๋ฐ ์๋ค. 3 ๋ฃจํธ HashSet์ ๋ด๊ธด ๋ ์์๋ ๊ฐ๊ฐ (๋ฃจํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก) ๋ค๋ฅธ HashSet 2๊ฐ์ฉ์ ์ ์๋ก ๊ฐ๋ HashSet์ด๋ค. 4 ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต๋ฌธ์ ์ํด ์ด ๊ตฌ์กฐ๊ฐ ๊น์ด 100๋จ๊ณ๊น์ง ๋ง ๋ค์ด์ง๋ค. ๋ฐ๋ผ์ ์ด HashSet์ ์ญ์ง๋ ฌํํ๋ ค๋ฉด hashCode ๋ฉ์๋๋ฅผ 2^100๋ฒ ๋๊ฒ ํธ์ถํด์ผ ํ๋ค.
- ์ญ์ง๋ ฌํ๊ฐ ์์ํ ๊ณ์๋๋ค๋ ๊ฒ๋ ๋ฌธ์ ์ง๋ง, ๋ฌด์ธ๊ฐ ์๋ชป๋ ์๋ค๋ ์ ํธ์กฐ์ฐจ ์ฃผ์ง ์๋๋ค๋ ๊ฒ๋ ํฐ ๋ฌธ์ ๋ค.
- ์ด ์ฝ๋๋ ๋จ ๋ช ๊ฐ์ ๊ฐ์ฒด๋ง ์์ฑํด๋ ์คํ ๊น์ด ์ ํ์ ๊ฑธ๋ ค๋ฒ๋ฆฐ๋ค. ์ด ๊ฐ์ฒด ๊ทธ๋ํ๋ 201๊ฐ์ HashSet ์ธ์คํด์ค๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ทธ ๊ฐ๊ฐ์ 3๊ฐ ์ด ํ์ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ๊ฐ๋๋ค.
- ๊ฐ์ฒด์ ๋ฐ์ดํธ ์ํ์ค๋ฅผ ๋ณํํด์ฃผ๋ ๋ค๋ฅธ ๋ฉ์ปค๋์ฆ์ด ๋ง์ด ์๋ค. ์ด ๋ฐฉ์๋ค์ ์๋ฐ ์ง๋ ฌํ์ ์ฌ๋ฌ ์ํ์ ํํผํ๋ฉด์ ๋ค์ํ ํ๋ซํผ ์ง์, ์ฐ์ํ ์ฑ๋ฅ, ํ ๋ถํ ์ง์ ๋๊ตฌ, ํ๋ฐํ ์ปค๋ฎค๋ํฐ์ ์ ๋ฌธ๊ฐ ์ง๋จ ๋ฑ ์๋ง์ ์ด์ ๊น์ง ์ ๊ณตํ๋ค.
- ์ด ์ฑ ์์๋ ์ ๋ฐ ์ง๋ ฌํ์ ๊ตฌ๋ถํ๊ณ ์ ํฌ๋ก์ค-ํ๋ซํผ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ํํ(cross-platform structured-data representation)์ด๋ผ ํ๋ค.
์ง๋ ฌํ๋ ์ํํ๋ ํผํด์ผ ํ๋ค.
์์คํ ์ ๋ฐ๋ฐ๋ฅ๋ถํฐ ์ค๊ณํ๋ค๋ฉด JSON์ด๋ ํ๋กํ ์ฝ ๋ฒํผ ๊ฐ์ ๋์์ ์ฌ์ฉํ์.
์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ๋ ์ญ์ง๋ ฌํํ์ง ๋ง์.
๊ผญ ํด์ผ ํ๋ค ๋ฉด ๊ฐ์ฒด ์ญ์ง๋ ฌํ ํํฐ๋ง์ ์ฌ์ฉํ๋, ์ด๋ง์ ๋ ๋ชจ๋ ๊ณต๊ฒฉ์ ๋ง์์ค ์๋ ์์์ ๊ธฐ์ตํ์.
ํด๋์ค๊ฐ ์ง๋ ฌํ๋ฅผ ์ง์ํ๋๋ก ๋ง๋ค์ง ๋ง๊ณ , ๊ผญ ๊ทธ๋ ๊ฒ ๋ง๋ค์ด์ผ ํ๋ค๋ฉด ์ ๋ง ์ ๊ฒฝ ์จ์ ์์ฑํด์ผ ํ๋ค.