2023년 10월 13일

2023. 10. 23. 17:14· TIL
목차
  1. replace
  2. escapeHTML
  3. 픽스 완료
728x90
반응형
페이지가 꽤 완성되었을 즈음, 장난기가 돌았다.

이미지 url, 이름 을 작성한 후에 내용에 html 코드를 넣어보았다.

하라는거 안하고 헛짓거리를 하게 되는 내 모습을 발견할 수 있었는데,

꼭 이럴때 특이점이 발생하더라.

XXS

gpt 야

xss 공격이 뭐야?

gpt :

XXS는 일반적으로 XSS라고 불리는 크로스 사이트 스크립팅(Cross-Site Scripting)의
오타일 것 같습니다.

꼽주냐

XSS는 웹 애플리케이션의 취약점 중 하나로, 
공격자가 악의적인 스크립트를 웹 페이지에 삽입할 수 있게 하는 것을 말합니다.

XSS 공격은 크게 3가지 유형으로 나뉩니다:

Stored XSS (저장형 XSS): 
공격자가 악의적인 스크립트를 웹 애플리케이션의 데이터베이스에 저장시키는 방식입니다. 
다른 사용자가 해당 페이지를 방문하면 저장된 악의적인 스크립트가 실행됩니다.

Reflected XSS (반사형 XSS): 
사용자가 특정 링크를 클릭하게 만들어, 
해당 링크에 포함된 악의적인 스크립트가 바로 실행되는 방식입니다. 
이 공격은 피해자가 악의적인 링크를 클릭해야만 발생합니다.
DOM-based XSS (DOM 기반 XSS): 웹 애플리케이션의 클라이언트 측 코드, 
주로 JavaScript, 내에서 악의적인 스크립트가 실행됩니다. 
이는 문서 객체 모델(DOM)에서 발생하며, 
서버와 클라이언트 사이의 통신 없이 바로 클라이언트 측에서 실행됩니다.

XSS 공격은 사용자의 세션 쿠키를 도용하거나, 
피해자의 웹 브라우저에서 악의적인 행동을 유도하거나, 
사용자의 데이터를 변조하는 등 다양한 피해를 줄 수 있습니다. 
웹 애플리케이션 개발 시에는 이러한 XSS 취약점을 방지하기 위한 
다양한 방법을 적용해야 합니다.

- GPT-4.0

자세한 내용은 나중에 공부하도록 하자.
내가 겪은 부분은 이렇다.

html 안에 html 안에 html 안에 html ...

이론상 무한 츠쿠요미

카드 안에 새로운 카드가 생성되는 모습을 볼 수 있었다.
검색을 해보니 이를 대비하기 위해 여러가지 방법이 있는것을 확인할 수 있었다.

replace

js 기능중 replace라는 메서드가 있다.
글자를 다른 글자로 치환해주는 기능이다.

function replacer(unsafe) {
    return unsafe
         .replace(/&/g, "&")
         .replace(/</g, "&lt;")
         .replace(/>/g, "&gt;")
         .replace(/"/g, "&quot;")
         .replace(/'/g, "&#039;");
}

이렇게 하면 카드를 불러올 때 해당 글자를 엔티티

데바데

로 불러오는 방식으로 처리 할 수 있더라.
근데 솔직히 보기 불편하다.

escapeHTML

escape 하면 Tarkov이 먼저 떠오르지만

gpt에게 물어보니 escapehtml 이라는 메서드를 만들랜다

function escapeHTML(str) {
    var div = document.createElement('div');
    div.appendChild(document.createTextNode(str));
    return div.innerHTML;
}

그러고

 docs.forEach((doc) => {

        let row = doc.data();
        let mbti = row.mbti;
        // mbtiColor 메소드를 통해 color 지정 및 변환
        let color = mbtiColor(mbti);
        console.log(row);

        let card_html = `
        <div class="card border-success mb-3" style="max-width: 20rem;">
        <div class="card-header d-flex justify-content-between align-items-center">
            <div>
                <span>${escapeHTML(row['title'])}</span>
                <small id="mbti" style="color : ${color}">${escapeHTML(row['mbti'])}<small>
            </div>
            <button type="button" class="btn-blog btn btn-link" onclick="window.open('${escapeHTML(row['blogUrl'])}')"><small>blog</small></button>
            <button type="button" id="${doc.id}" class="btn-edit btn btn-success" data-toggle="modal" data-target="#modalEdit"><small>Edit</small></button>
        </div>
        <div class="card-body">
            <img src="${escapeHTML(row['image'])}" class="card-img-top">
            <p class="card-text text-primary">${escapeHTML(row['content'])}</p>
        </div>
    </div>
            `;
        $('.cards_table').append(card_html);
    });

이런 식으로 사용 할 수 있었다.
솔직히 내 취향은 후자다.

다만, 현실적으로 생각할때 replace를 이용하는 방법이 여러면에서 효율적이고 동시에 안전하다고 생각한다.

픽스 완료

728x90
반응형

'TIL' 카테고리의 다른 글

2023년 10월 15일  (2) 2023.10.23
2023년 10월 14일  (0) 2023.10.23
2023년 10월 12일  (0) 2023.10.23
2023년 10월 10일  (0) 2023.10.23
2023년 10월 7일  (0) 2023.10.23
  1. replace
  2. escapeHTML
  3. 픽스 완료
'TIL' 카테고리의 다른 글
  • 2023년 10월 15일
  • 2023년 10월 14일
  • 2023년 10월 12일
  • 2023년 10월 10일
정유감
정유감
반응형
정유감
정말유감이야
정유감
전체
오늘
어제
  • 분류 전체보기 (57)
    • TIL (48)
    • KPT (4)
    • TMI (3)
    • BLOG (0)
    • DIARY (0)
    • 포스팅용 메모 (0)
    • AS (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 브루트포스
  • mapToInt
  • contains
  • euclidean
  • 하이퍼링크?
  • Comparator
  • isBefore
  • 홀수 짝수
  • 백트래킹
  • Til
  • 순열
  • 비트마스크
  • markdown
  • 완전탐색
  • toBinary
  • 에이닷
  • 약수의 합
  • 자연수 뒤집어 배열로 만들기
  • kpt
  • Summit

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
정유감
2023년 10월 13일
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.