SW 개발 보안 구현 ⭐⭐⭐
시큐어 코딩 가이드
설계 및 구현 단계에서 해킹 등의 공격을 유발할 가능성이 있는 잠재적인 보안 취약점을 사전에 제거하고 외부 공격으로부터 안전한 소프트웨어를 개발하는 기법
시큐어 코딩 가이드 적용 대상 (입보시 에코캡아)
입력데이터 검증 및 표현
SQL 삽입 공격
- 웹 애플리케이션에서 입력데이터에 대한 유효성 검증을 하지 않을 경우 공격자가 입력 창 및 URL에 SQL 문을 삽입하여 DB로부터 정보를 열람, 조작할 수 있는 취약점 공격 기법
- 매개변수를 받는 PreparedStatement 객체를 상수 문자열로 생성하고 파라미터 부분을 setString 등의 메소드로 설정하여 외부의 입력이 쿼리문의 구조를 바꾸는 것 방지
1. 조치 전
String category = request.getParameter("category");
...
// 1) 외부로부터 입력받은 값을 검증 없이 사용할 경우 안전하지 않음
String sql = "SELECT * FROM board WHERE b_category=" + category + "";
Connection con = db.getConnection();
// 2) 외부로부터 입력받은 값이 처리 없이 쿼리로 수행되어 안전하지 않음
Statement stmt = con.createStatement();
Resultset rs = stmt.executeQuery(sql);
2. 조치 후
String category = request.getParameter("category");
...
// 1) 외부로부터 입력 받은 값은 안전하지 않을 수 있어
// PreparedStatement 사용을 위해 ? 문자로 바인딩 변수 사용
String sql = "SELEXT * FROM board WHERE b_category = ?";
Connection con = db.getConnection();
// 2) PreparedStatement 사용
PreparedStatement = con.preparedStatement(sql);
// 3) PreparedStatement 객체를 상수 문자열로 생성하고 파라미터 부분을 setString으로 설정하여 안전
pstmt.setString(1, category);
Resultset rs = pstmt.executeQuery();
XSS (크로스 사이트 스크립트) 공격
웹페이지에 악의적인 스크립트를 포함해 사용자 측에서 실행되게 유도할 수 있는 공격기법
1. 조치 전
// 1) 외부 입력값을 검증 없이 화면에 출력하면 공격 스크립트가 포함된 URL을 생성할 수 있어 안전 X
<% String keyword = request.getParameter("keyword"); &>
검색결과 : ${m.content}
<script type="text/javascript">
//2) 서버를 거치지 않는 공격스크립트가 포함된 URL을 생성할 수 있어 안전하지 않음
document.write("keyword : " + <%=keyword%>);
</script>
2. 조치 후
// 1) 입력값에 대하여 스크립트 공격 가능성이 있는 문자열 치환 (중요)
<% String keyword = request.getParameter("keyword"); %>
keyword = keyword.replaceAll("&", "&");
keyword = keyword.replaceAll("<", "<");
keyword = keyword.replaceAll(">", ">");
...
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
...
// 2) JSP에서 출력값에 JSTL의 <c:out>을 사용하여 처리
검색 결과 <c:out value="${m.content}"/>
<script type = "text/javascript">
document.write("keyword:" <%=Encoder.encodeForJS(Encoder.encodeForHTML(keyword))%>);
</script>
취약한 패스워드 허용 보안 약점
숫자/영문 등 혼합 시 최소 10자 이상 요구
숫자/영문/특수문자 등 혼합 시 최소 8자 이상 요구
변경 주기 설정 (최소 6개월)
암호화 보안 약점 유형
시간 및 상태
동시 수행을 지원하는 병렬 시스템이나 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태를 부적절하게 관리하여 발생할 수 있는 취약점
1. 조치 전
public void run() { ... }
2. 조치 후
public void run() { synchronized(SYNC) { ... } }
코드 오류
반응형
'🎓 정보처리기사' 카테고리의 다른 글
[정보처리기사 - 실기] X. 프로그래밍 언어 활용 - 언어 특성 활용하기 (0) | 2020.11.23 |
---|---|
[정보처리기사 - 실기] X. 프로그래밍 언어 활용 - 기본 문법 활용 (0) | 2020.11.23 |
[정보처리기사 - 실기] IX. 소프트웨어 개발 보안 구축 - 소프트웨어 개발 보안 설계 (0) | 2020.11.23 |
[정보처리기사 - 실기] VIII. SQL 응용 - 응용 SQL 작성하기 (0) | 2020.11.22 |
[정보처리기사 - 실기] VIII. SQL 응용 - 절차형 SQL 작성하기 (0) | 2020.11.22 |