2021.05.21

๊น€์Šน์šฐยท2021๋…„ 5์›” 21์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
61/68

2021.05.20

๐ŸŽ‰ TIL

1. XSS(Cross Site Scripting)

  • ์ฐพ์•„๋ณด๊ฒŒ ๋œ ๊ณ„๊ธฐ
    : ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘์— ์–ด๋“œ๋ฏผ ์ชฝ์—์„œ ์—๋””ํ„ฐ์— ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ์‚ฝ์ž…์„ ํ—ˆ์šฉํ•ด๋‹ฌ๋ผ๋Š” ์š”์ฒญ์ด ๋“ค์–ด์™”๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผ„๋„ UI ์—๋””ํ„ฐ์—์„œ๋Š” ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด k-script๋กœ escape ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฑฐ๋‚˜ ์•„์˜ˆ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ์‚ญ์ œ์‹œ์ผœ ๋ฒ„๋ ค์„œ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ์ž…๋ ฅ์ด ์–ด๋ ค์šด ์ƒํ™ฉ์ด์—ˆ๋‹ค.

  • ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•
    : ์šฐ์„  kendo Editor ์˜ต์…˜ ์ค‘์—์„œ serialization: { scripts: true, }๋ฅผ ์ ์šฉํ•ด์„œ script ํƒœ๊ทธ์˜ ์ž…๋ ฅ์„ ํ—ˆ์šฉํ–ˆ๋‹ค. (๊ด€๋ จ ๋ฌธ์„œ)
    : ์ผ„๋„ ์—๋””ํ„ฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ XSS ๊ธฐ๋ฒ•์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž…๋ ฅ๋œ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ serialization ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ•์ œ๋กœ์ด ์˜ต์…˜์„ true๋กœ ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ํ–ˆ๋‹ค. (๊ด€๋ จ ๋ฌธ์„œ)
    : ํ•˜์ง€๋งŒ ๊ทธ ๋‹ค์Œ์— ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋Š” ์ฒ˜์Œ ์ž…๋ ฅ์‹œ์—๋Š” scriptํƒœ๊ทธ๊ฐ€ ๋‚ ์•„๊ฐ€์ง€ ์•Š๊ณ , ์„œ๋ฒ„๋กœ ์ž˜ ์ „์†ก์ด ๋˜์—ˆ๋Š”๋ฐ ์—๋””ํ„ฐ์— ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜จ ๊ฐ’์„ ๋„ฃ์„ ๋•Œ script๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์ „๋ถ€ x-script๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.
    : ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋Š” ๋ฌธ์ œ ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์•„ ์„œ๋ฒ„๋กœ ์ „์†ก๋  ๋•Œ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, kendo Editor์˜ ๊ฐ’์œผ๋กœ ๋„ฃ๊ธฐ ์ „ ์ฆ‰, textarea์˜ value์— ๊ฐ’์„ ๋„ฃ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค.
    : ๋”ฐ๋ผ์„œ, ๊ธฐ์กด์— textarea.val()์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ $(textarea).data("kendoEditor").value()์— ์ง์ ‘ ๊ฐ’์„ ์ „๋‹ฌํ–ˆ๋‹ค.
    : ๋˜ํ•œ, ๊ธฐ์กด์—๋Š” ํƒœ๊ทธ๋“ค์ด <์™€ ๊ฐ™์ด ์ธ์ฝ”๋”ฉ๋˜์–ด์„œ ์„œ๋ฒ„์— ์ „์†ก๋˜์—ˆ๋Š”๋ฐ, ์ธ์ฝ”๋”ฉ์„ ํ•˜์ง€ ์•Š๊ณ , ํƒœ๊ทธ ์ž์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฌถ์–ด์„œ ์ „์†กํ–ˆ๊ณ  ๊ทธ๋Œ€๋กœ ๋ฐ›์•„์™€์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค.

  • XSS ๋ž€?

  • ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•(๊ธฐ๋ฒ•)
    : ์ž…๋ ฅ ๊ฐ’(html ์†Œ์Šค)๋ฅผ ๊ฒ€์‚ฌํ•ด์„œ ์•…์˜์ ์ธ ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ์ ์ ˆํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.

  • XSS๋ฅผ ์šฐํšŒํ•ด์„œ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ innerHTML๋กœ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•

<!-- ์‚ฝ์ž…ํ•  ์Šคํฌ๋ฆฝํŠธ -->
<script id="test-script" type="text/javascript">alert(123);</script>
// ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ์˜ ๋‚ด์šฉ์„ ๋ฌธ์ž์—ด๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
const content = document.querySelector("#test-script").innerHTML; // "alert(123);"

// ๊ฐ€์ ธ์˜จ ๋ฌธ์ž์—ด์„ eval ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•˜๋ฉด ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ์˜ ๋‚ด์šฉ์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค!
eval(content);

2. ๋ฌธ์ž์—ด๋กœ ๋“ค์–ด์˜จ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ์ถ”์ถœํ•ด์„œ ํ˜„์žฌ ๋ฌธ์„œ์— append ํ•˜์—ฌ ์‹คํ–‰ํ•˜๊ธฐ

var arr = [];
$('.detail').children.forEach( v=> {
    if(v.tagName.toUpperCase() == 'SCRIPT') {
        var tag = document.createElement('script');
        tag.innerHTML = v.innerHTML;
        v.attributes.forEach( attr => {
            tag.setAttribute(attr.name, attr.value);
        });

        arr.push(tag);
        v.remove();
    }
});

arr.forEach( tag => {
    $('.detail').appendChild(tag);
})

3. ํ”Œ๋ž˜๊ทธ(Flag) ๋ณ€์ˆ˜์˜ ํ™œ์šฉ

  • ์‚ฌ์šฉํ•œ ์ด์œ : ํŽ˜์ด์ง€์—์„œ API ์กฐํšŒ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ํ™”๋ฉด์— ๋ Œ๋”๋ง๋œ ์ดํ›„์— ํŠน์ • ๋กœ์ง์„ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ตœ์ดˆ 1ํšŒ๋งŒ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ํ”Œ๋ž˜๊ทธ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

  • ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•: isInit์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑ, ์ตœ์ดˆ Vue ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ๋Š” false๋กœ ์„ค์ •ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŠน์ • ๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์—, isInit์˜ ๊ฐ’์ด true์ธ์ง€ ์ฒดํฌ ํ›„ true๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.
    isInit์ด false๋ผ๋ฉด ์•„์ง ๋กœ์ง์„ ์‹คํ–‰ํ•œ ์ ์ด ์—†์—ˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ํ•ด๋‹น ๋กœ์ง์„ ์‹คํ–‰ํ•œ ํ›„์— isInit์˜ ๊ฐ’์„ true๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

data : {
    isInit: false,
}

updated() {
    if( this.isInit ) return;

    // ... ์›ํ•˜๋Š” ๋กœ์ง ์‹คํ–‰
    this.isInit = true;
}

4. Javascript function arguments

arguments๋Š” ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋‹ค!

  • arguments๋ฅผ ๋ฐฐ์—ด๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
    // 1.
    Array.from(arguments);

    // 2. 
    Array.prototype.slice.call(arguments);
profile
์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ข‹์€ ๊ฒฝํ—˜์„ ์„ ์‚ฌํ•˜๊ณ  ์‹ถ์€ ์ฃผ๋‹ˆ์–ด ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€