Sql Injection

1 minute read

  • Sql Injection
  • DB에 사용되는 SQL문이 입력 받은 값을 사용해서 생성될 때
    특수한 기호 등을 사용해서 본래의 기능이 아닌 다른 기능의 SQL문이 동작하도록 하는 공격방법
  • 방어방법
  • 입력단에서 방어
  • 입력단어중 insert, update ,delete 등이 들어있다면 페이지 실행을 중지
  • 주요 단어 : SELECT, UPDATE, DELETE, INSERT, DROP, UNION 등등

  • 장점 : 대응이 간단하다
  • 단점 : 공격이 아닌 것에도 반응한다.
  • 웹 프로그램에서 직접 처리하거나, 아파치 ModSecurity 등을 설치해서 사용

  • magic_quotes
  • PHP지원하는 MySQL 인젝션 방지법
    ‘나 “에 자동으로 \를 붙여주는 방식
  • 장점 : 이럴 경우 MySQL에 SQL이 생성될 때 자동으로 escape 처리가 된다는 장점이 있다.
  • 단점 : 문제는 다른 DBMS에서 escape처리가 \가 아닌 경우가 있다.
    그리고 계속 내용을 불러서 수정 저장할 경우 ‘ -> ' -> \’ -> \\’ 처럼  \가 계속 붙는 경우도 있다.
  • PHP 5.3.0 부터는 사용금지(DEPRECATED) PHP 6.0.0에서는 해당 기능 자체가 사라진다.

  • Bind
  • SQL 문에 입력 받은 값을 바로 쓰지 않고 bind 문자열을 대신 사용한다.
    입력 받은 값을 그 뒤 바인드 시켜서 해당 값에 대응되도록 한다.
  • 장점 : Injection에서 해방이다. 바인드 되는 값은 SQL문을 바꾸기 않기 때문에 Injection 당하지 않는다.
  • 아, 기본으로 제공되는게 아니라 에뮬레이팅 된것이라면 bind 메소드(또는 함수)에서 escape 처리해주면 된다.

  • 단점 : 프로그램의 쿼리 부분을 다시 만들어야한다.
  • DB클래스 등을 사용했다면 수정 부분이 줄어들겠지만, 페이지에서 바로 해당 DBMS함수로 쿼리를 사용한 방식이라면…. 언제 다 뜯어낼꼬…

  • 링크
  • 설명 잘된 곳
  • Web Hacking 1탄 SQL Injection (레디오스님의 이글루)
  • 일반적으로 사용되는 패턴
  • ’ or 1=1–
  • ” or 1=1–
  • or 1=1–
  • ’ or ‘a’=’a
  • ” or “a”=”a
  • ’) or (‘a’=’a
  • ’ or password like ‘%
  • 참고
  • –는 Oracle 1 line 주석

    는 MySQL 1 line 주석 


🔗original-link

Updated: