# 웹 개발을 위해 꼭 알아야하는 보안 공격

> Clean Markdown view of GeekNews topic #10618. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=10618](https://news.hada.io/topic?id=10618)
- GeekNews Markdown: [https://news.hada.io/topic/10618.md](https://news.hada.io/topic/10618.md)
- Type: news
- Author: [kciter1](https://news.hada.io/@kciter1)
- Published: 2023-08-30T10:44:51+09:00
- Updated: 2023-08-30T10:44:51+09:00
- Original source: [kciter.so](https://kciter.so/posts/basic-web-hacking)
- Points: 42
- Comments: 0

## Topic Body

* SQL Injection  
  * 요청에 악의적인 SQL을 삽입하여 공격하는 기술  
  * 간단하지만 아주 강력한 공격  
  * 요즘은 대부분 라이브러리, 프레임워크 수준에서 막아주지만 항상 조심해야함  
  * Error based SQL Injection  
    * 일부러 에러를 발생시켜서 DB에 대한 정보를 알아내는 방법  
    * 에러 메시지가 노출되지 않도록 조심해야함  
  * Blind SQL Injection  
    * 쿼리 결과의 참/거짓 정보를 보고 원하는 정보가 존재하는지 추론하는 공격 방법  
    * 이를 통해 데이터베이스, 테이블, 컬럼 명을 파악할 수 있음  
  * Union SQL Injection  
    * union 명령을 이용하여 정보를 얻는 공격 방법  
* XSS  
  * 웹 페이지에 악성 자바스크립트를 삽입하는 공격  
  * 필터링을 잘 해야함  
  * Stored XSS  
    * 보통 XSS라하면 소개되는 공격 방법  
    * DB에 자바스크립트 코드를 넣고 불러올 때 실행되도록 하는 공격  
    * 브라우저에서 스크립트 실행을 막고 저장될 때 필터링을 해야함  
  * Reflected XSS  
    * 입력을 그대로 브라우저에 노출시키는 공격 방법  
    * URL Query에 redirectUrl 등이 있을 때 이곳에 자바스크립트를 넣을 수 있음  
    * 악의적인 링크를 타인에게 배포할 수 있으므로 막아야함  
  * DOM Based XSS  
    * DOM에 악의적인 스크립트를 넣는 방법  
    * img 태그의 src 등에 넣을 수 있음  
* CSRF Attack  
  * 공격자가 서비스 사용자를 이용하여 요청을 보내는 공격  
  * Referer Check, CSRF Token, CAPTCHA 를 통해 막는 것이 가능  
* Command Injection  
  * 쉘을 실행시키는 로직을 이용한 공격  
  * 시스템 권한이 탈취되는 것이나 마찬가지기 때문에 매우 치명적  
  * 쉘 명령을 실행시키는 시스템 함수를 사용하지 않는 것이 제일 좋고 만약 꼭 사용해야한다면 |, &, ;, >, <와 같은 민감한 문자는 필터링할 것  
* File Upload Attack  
  * WebShell이 가능한 코드가 담긴 파일을 업로드하고 해커가 URL을 통해 접근 가능해지면 Command Injection과 같은 효과를 볼 수 있음  
  * 확장자와 파일 타입을 검사하여 허락된 타입만 저장하는 것이 좋음  
  * 해커가 파일을 찾을 수 없도록 업로드 파일의 이름과 확장자를 난수화하여 저장할 것  
  * 특수 문자가 포함된 경우 업로드를 막는 것이 좋음 (Null byte Injection 방지)  
* JavaScript Injection  
  * 브라우저에서 자바스크립트를 삽입시키는 공격  
  * 만약 Client-Side에 민감한 데이터를 넣어놨다면 해당 공격을 통해 탈취 가능  
  * 클라이언트엔 민감한 데이터를 절대 Plain하게 넣으면 안됨  
  * 데이터 유효성 검사가 필요한 경우 서버에서 처리해야함  
* DDoS  
  * 분산된 시스템을 이용하여 서버에 비정상적으로 많은 트래픽을 보내 마비시키는 공격  
  * 단순한데 제일 막기 힘든 공격  
* Dictionary Attack  
  * 미리 데이터베이스에 등록해놓은 수많은 문자열을 암호로 대입하는 공격  
  * 간단한 단어는 비밀번호로 등록하지 못하게 막을 것  
  * Account Lockout Policy를 도입  
  * OTP 같은 2-factor 인증을 도입  
* Rainbow Table  
  * 평문을 해시 함수로 만든 문자열을 모두 저장시켜 놓은 표  
  * 주로 계정 데이터 탈취 후 암호 원문을 알아내기 위해 사용함  
  * Salt 사용  
  * Key Stretching  
  * PBKDF2, Bcrypt 등의 암호화 알고리즘 사용

## Comments



_No public comments on this page._
