Cross-Site Scripting(XSS)
xss?
모든 웹 취약점에서 가장 많이 발생한다.
서버에 해를 입히지 않는다.
사용자들의 데이터를 취득을 하는것이 목적이다.
web1 web site
web2 => AJAX
web3 => 웹브라우저 + 블록체인 접속 key
XSS 공격 흐름
- 해커(HACKER)가 신뢰할 수 있는 웹사이트에 악성 스크립트를 삽입
- 공격자는 취약한 웹사이트의 입력 필드(예: 댓글, 검색창, 게시판 등)에 악성 JavaScript 코드를 삽입-
- 해당 웹사이트가 적절한 입력 검증을 하지 않으면, 악성 코드가 그대로 저장
- 피해자(VICTIM)가 해당 신뢰할 수 있는 웹사이트를 방문하여 악성 스크립트를 실행
- 피해자가 웹사이트에 접속하면, 저장된 악성 스크립트가 자동으로 실행
- 피해자의 브라우저가 악성 스크립트를 실행하고, 해커에게 민감한 정보를 전송
- 피해자의 쿠키, 세션 토큰 또는 기타 민감한 정보가 공격자에게 전송될 수 있다.
- 이로 인해 피해자의 계정이 탈취되거나, 추가적인 공격이 수행된다.
XSS 공격 방지 방법
- 입력 값 검증(Input Validation)
- HTML, JavaScript 등의 특수 문자(<, >, ', " 등)를 이스케이프(escape) 처리하여 악성 코드 삽입을 방지합니다.
- 출력 시 인코딩(Output Encoding)
- 웹페이지에서 사용자 입력을 렌더링할 때, HTML 엔티티(<, > 등)로 변환하여 코드 실행을 차단합니다.
- Content Security Policy(CSP) 설정
- 웹사이트가 특정 스크립트 소스만 실행하도록 제한하여, 악성 코드 실행을 방지합니다.
- HTTPOnly 및 Secure 쿠키 설정
- HttpOnly 속성을 사용하면 JavaScript에서 쿠키에 접근할 수 없게 되어, 세션 탈취를 방지할 수 있습니다.
- 웹 애플리케이션 방화벽(WAF) 사용
- WAF를 활용하면 XSS 공격 패턴을 감지하고 차단할 수 있습니다.
xss 방어는 html encoding을 했다는게 의미
타컴퓨터에서
멤버 컨트롤러 수정
<script> </script>
이런 형태여야지 filtering이 된다.
<script>console.log("나는 해커다");</script>
입력시 안보임
개발자 도구에서는 보인다.
<a href='http://localhost:9999/404.html' target='_blank'>맛있게 먹는 영상</a>\
앵커태그는 필터링이 안된다.
tabnabbing은 tab이 하나 더 떴다.
이 링크를 누르고 눌느 사이트로 돌아간다음 다시 원 사이트로 돌아가면 위조된 사이트가 열린다.
해커사이트만들기
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<script>
if(window.opener){
opener.location='http://localhost:9999/fake.html';
}else{
window.location='http://localhost:9999/fake.html';
}
</script>
</body>
</html>
dow.opener) 여기가 중요하다.
fake사이트는 원사이트를 카피뜨면 된다.
화면을 한땀한땀 뜨는 경우가 있고
이미지로 대체하는 경우가 있다.
<img src="img/fake.png" usemap="#image-map">
<map name="image-map">
<area shape="rect" coords="531, 6, 589, 29" href="#"
alt="login" onclick="openModal()">
</map>
sop란? same origin policy
sop는 기본적인 방어 전략이 아니다.
보안은 한번 더 어렵게 만드는 기술이다.
루트포스 공격을 하기에 어렵게 만들기 작업
루트포스(Brute Force) 공격이란?
**브루트포스 공격(Brute Force Attack)**은 **"무차별 대입 공격"**이라고도 하며, 가능한 모든 조합을 하나씩 시도하여 비밀번호나 암호화 키를 찾아내는 해킹 기법
1. 해싱을 한다.
해싱이란 뭘까?
해쉬 알고리즘은 인풋이 같으면 아웃풋이 같다.
그러면 또 쉬워진다.
impoort != hast+saly=> output을 한다.
salt는 물리적으로 다른 db에 있어야한다.
왜?
해커가 비밀번호 해시와 Salt를 함께 탈취하면 쉽게 크랙 가능
'💡 URECA > 🗒️ 스터디 노트' 카테고리의 다른 글
[URECA] Day32 | 쇼핑몰 총정리 (4) | 2025.03.12 |
---|---|
[URECA] Day 31 | backend (0) | 2025.03.11 |
[URECA] Day 29 | Backend(4) 🛍️ (0) | 2025.03.07 |
[URECA] Day28 | Backend(3) (0) | 2025.03.06 |
[URECA] Day 27 | Backend(2) (1) | 2025.03.05 |