function aaa() {
ย ย this.text = "aaํ ์คํธ";
ย ย this.sound = "aa์ฌ์ด๋";
ย ย this.move = "aa๋ฌด๋ธ";
ย ย this.objects = [];
}
aaa.prototype.addObj = function(obj) {
ย ย this.objects.push(obj);
}
aaa.prototype.remObj = function() {
ย ย this.objects.pop();
}
aaa.prototype.allGet = function(value) {
ย ย return eval("this.objects[this.objects.length-1]."+value);
}
aaa.prototype.allGet2 = function(value) {
ย ย var obj = this.objects[this.objects.length-1];
ย ย switch (value) {
ย ย ย ย case "text":
ย ย ย ย ย ย return obj.text;
ย ย ย ย ย ย break;
ย ย ย ย case "sound":
ย ย ย ย ย ย return obj.sound;
ย ย ย ย ย ย break;
ย ย ย ย case "move":
ย ย ย ย ย ย return obj.move;
ย ย ย ย ย ย break;
ย ย }
}
function bbb() {
ย ย this.text = "bbbํ ์คํธ";
ย ย this.sound = "bbb์ฌ์ด๋";
ย ย this.move = "bbb๋ฌด๋ธ";
}
var a = new aaa();
var b = new bbb();
a.addObj(a);
a.addObj(b);
console.log(a.allGet("text"));
console.log(a.allGet("sound"));
console.log(a.allGet("move"));
console.log(a.allGet2("text"));
console.log(a.allGet2("sound"));
console.log(a.allGet2("move"));
a.remObj();
console.log(a.allGet("text"));
console.log(a.allGet("sound"));
console.log(a.allGet("move"));
console.log(a.allGet2("text"));
console.log(a.allGet2("sound"));
console.log(a.allGet2("move"));
์ ๋ฐ์ ๊ธ๋ณด๊ณ ํด๋ดค๋๋ฐ ๊ธ์ ์์ง๋ ๋ณ์๋ง๋ค ๊ฒํฐ ์ ํฐ ๊ท์ฐฎ๋ค๋๊น
allGetํจ์์ฒ๋ผ evalํจ์๋ก ๋ณ์์ง์ ํ๋๊ฐ (๋์ ๋ณด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ evalํน์ง์)
allGet2ํจ์์ฒ๋ผ switch๋ฌธ์ผ๋ก ๊ณจ๋ผ๋ด๋๊ฐ
๋๋ค ํจ์๋งค๊ฐ๋ณ์๋ก text, sound, move ์ง์ ์จ์ค์ผํจ ์ด๊ฑฐ๋ ๊ท์ฐฎ์ผ๋ฉด.. ์คํํ์๋ง๋ค ๋ฐ๋๊ฒ ํ๋๊ฐ ํด์ผํ ๋ฏ
aaa.prototype.allSet = function(value, value2) {
ใฑใ ใฑใ
eval ์ข ํน์ดํ๋ฏ ใทใทใท
์ดํํฐ๋ธ ์๋ฐ์คํฌ๋ฆฝํธ ๋๊ฐ ์ด๋ค์ฑ ์์ eval์ฐ์ง๋ง๋ผ๊ณ ํจ. eval๋ก ๊ฐ๋ฅํ๊ฑฐ๋ ๋ค๋ฅธ๋ฐฉ์์ผ๋ก ๋ค์งค์์๊ณ ๋ฌธ์์ด๋ก ์คํ์ด๋๋๊น ๋ณด์์ ์ทจ์ฝํจ. ๋ธ๋ผ์ฐ์ ๋ก ๋๋ฒ๊น ํด๋ค๊ฐ ๋ฌธ์์ด ๋ฐ๊ฟ์ฐ๋ฉด ๋ฐ๋ก์คํ๋จ
Eval์ ์ปดํ์ผ๋ฌ๊ฐ ์ฑ๋ฅ ์ต์ ํ ํ๋ ค๊ณ ํธ๋ฒ ์ฐ๋ ๊ฒ๋ค ์๋ก ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๋งตํ๋ฑ์ ์ฟ๋จน์ด๋ผ ํ๊ณ ๋ฌผ๋ฆฌ์ณ ๋ฒ๋ฆฌ๋๊ฑฐ๋ผ 1์ฐจ์ ์ผ๋ก๋ ์ฑ๋ฅ๋ฌธ์ 2์ฐจ์ ์ผ๋ก๋ eval์ ์ฝ๋์ ๋ฃ์ผ๋ฉด ์ ์์ ์ผ๋ก ํด๋น ์ฝ๋์ ์ ๊ทผํ ๊ฒฝ๋ก๊ฐ ์๊ธฐ๋ฉด code injection์ผ๋ก ๋ญ์ง์ด๋ ์ง ํ ์ ์๋ ๋ฐํ์ ์ฃผ๊ธฐ ๋๋ฌธ์ ๋ณด์์ ๋ฌธ์ ๊ฐ ์์ ์ฆ ๋์ฒด์ ๊ฐ ์์ผ๋ฉด ์ ๋ ์ฐ๋ฉด ์๋จ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์์ ์ข ์ฐ์ด๊ธด ํจ ๋์ ์ผ๋ก ๋ค์ด์จ ์ฝ๋๋ค ๋ง๋ค์ด์ฃผ๋๋ฐ ์ฐ์ ์ปค์คํ ํจ์๋ผ๋์ง
๊ทผ๋ฐ ๋ชฉ์ ์ด ๋ญ์? ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ๋ ๊ฑฐ ๊ฐ๊ธดํ๋ฐ
์บ๋ฆญํฐ๊ฐ ๋ชฌ์คํฐ ํด๋์ค๋ก ๋ณ์ ํ๋๊ฑฐ ๊ตฌํํ๊ณ ์ถ์ด์์