목차
접기
728x90
반응형
XSS (Cross site scripting) 대응 방안
- 사용자 입력값 검증을 반드시 서버단에서 한다.
- 사용자 입력한 갑 중에 HTML 코드로 인식될 수 있는 특수문자를 일반문자로 치환하여 처리
- 웹 페이지를 출력할 때, HTML 코드로 인식될 수 있는 문자열(예를 들면 '<', '&' 등)을 일반 문자열로 바꿔서
출력하도록 하며, 유저가 입력한 값 뿐만 아니라 외부 시스템에서 온 데이터 등도 웹 페이지에 출력 대상이 되는 것이라면
반드시 처리해주는 것이 중요하다.
SQL Injection이란?
- Web hacking 기법 중 하나.
- 웹 애플리케이션의 뒷단에 있는 Database에 질의(쿼리를 보내는 것)하는 과정 사이에 일반적인 값 외에 악의적인
의도를 갖는 구문을 삽입하여 공격자가 원하는 SQL쿼리문을 실행하는 기법. - 주로 사용자가 입력한 데이터를 제대로 필터링, 이스케이핑 하지 못했을 경우에 발생한다.
- 요즘의 거의 모든 데이터베이스 엔진은 유저 입력이 의도치 않은 동작을 하는 것을 방지하기 위해
escape 함수와 prepared statement를 제공한다.- 대부분의 SQL Injection의 경우 값을 입력받을 때 특수문자 여부를 검사하여 방어한다.
- 아이디와 패스워드를 입력받는 입력에 특수문자가 포함되어 있는지 검증 로직을 추가하여 특수문자가 입력된 경우
해당 요청을 막아낼 수 있다.
- SQL 서버에 오류가 발생했을시 해당하는 에러 메시지를 표시해선 안된다.
- 테이블에서는 모든 정보를 가지고 있지만 View를 사용하면 테이블의 일부만 보일 수 있고 접근 권한을 다르게 할 수도 있다.
- 원본의 테이블에는 접근 권한을 높이고 일반 사용자는 view로만 접근하게 되면 원본 테이블이 공격에 의해
노출되는 정보를 줄일 수 있다.Statement대신 Preparedstatement를 사용하자.
- mysql의 Preparedstatement 구문을 사용하면 특수문자를 자동으로 escaping 해준다.
- 클라이언트 측 자바스크립트로 폼 입력값을 우선 검증하자. 하지만 자바스크립트는 공격자가 꺼버리면
그만이기 때문에 서버 측에서 입력값을 한번 더 필터한다.정규식을 이용한 파라미터 값 필터링이 제시될 수 있다.
이것은 매우 간단한 예제로, 기본적인 공격을 막을수는 있지만 매우 안전하다고 할 수 없다.
웹사이트 XSS 취약점 보완에는 라이브러리를 가져다 사용하는 것이 좋다.
라이브러리는 전문적인 보안 업체나 기업에서 만든 것을 사용하는 것이 좋다.
대표적으로 추천드리는 것은 OWASP Antisamy, NAVER Lucy XSS Filter, ESAPI이다.
sql injection과 XSS의 차이점은?
- sql injection은 엉뚱한 파라미터를 넣어서 Query를 실행하는데 목적(DB를 건드리는 것)이 있는 반면에
XSS는 자바스크립트를 실행하는데 있다.
728x90
반응형
LIST
'IT 유용한 정보' 카테고리의 다른 글
sts(이클립스) code style 변경하는 방법, 코드 정렬 변경 (0) | 2020.12.28 |
---|---|
자바에서 XSS 대응 방법 ( naver/lucy xss filter 라이브러리 사용법) (0) | 2020.12.25 |
인터셉터(interceptor)란? (0) | 2020.12.23 |
listener란? (0) | 2020.12.23 |
bean이란? (0) | 2020.12.23 |