목록시큐어코딩 (5)
삶 가운데 남긴 기록 AACII.TISTORY.COM
Eval Injection 동적으로 생성되어 수행되는 명령어 주입 정의 외부 입력이 동적으로 스크립트나 명령어 생성에 사용될 경우 의도하지 않은 명령어가 외부부터 주입되어 문제를 일으킬 수 있습니다. 방어 방법 외부의 입력이 eval()함수의 인자로 사용될 경우 위험 문자를 제거합니다. ESAPI for javascript 등 보안 API를 이용하여 외부에서 입력되는 값을 검증한 후 사용합니다. 안전하지 않은 코드의 예 외부 입력 evalParam이 eval()함수의 인자로 사용되고 있습니다. 안전한 코드의 예
Improper Neutralization of Script-Related HTML Tags in a Web Page 크로스 사이트 스크립트 공격 취약점 정의 외부에서 입력되는 스크립트 문자열이 웹 페이지 생성에 사용되면 생성된 웹페이지를 열람하는 사용자에게 피해를 입힐 수 있습니다. 방어 방법 jsp의 document.write() 같은 DOM 객체 출력을 수행하는 메소드의 인자 값으로 외부 입력을 사용하면 위험한 문자를 제거해야 합니다. 보안성이 검증된 API를 사용하여 위험 문자열을 제거하십시오. 안전하지 않은 코드의 예 document.write("name:"+); 외부 입력을 그대로 이용하고 있습니다. 안전한 코드의 예
External Control of System or Configuration Setting 시스템 또는 구성 설정의 외부 제어 정의 시스템 설정이나 구성 설정을 외부에서 제어 가능하게 하면 예상치 못하게 악용 가능성이 있습니다. 방어 방법 외부 입력을 화이트 리스트 방식으로 검사한 후 사용합니다. 안전하지 않은 코드의 예 private final String COMMAND_PARAM = "command"; private final String CHANGE_FTP_PORT = "change_service_port"; priavte final String PORT_PARAM = "port"; //생략 protected void doPost(HttpServletRequest request, HttpServl..
SQL Injection: mybatis Data Map 정의 외부 입력 값이 SQL 의 인자값으로만 사용되지 않고 문자열로 연결되는 값으로 사용되면 SQL문에 Injection 되어 의도하지 않은 동작을 할 수 있게 됩니다. 방어 방법 외부 입력 값에 대해 안전하지 않은 문자열을 제거하도록 합니다. mybatis Data Map 에 문자열 삽입 인자($...$)를 사용하지 말고 ## 형태를 사용합니다. 안전하지 않은 예 DELETE STUDENTS WHERE NUM = #num# AND name = '$name$' $name$ 으로 전달되는 값에 ' OR 'x' = 'x' 를 외부 입력으로 전달되면 where조건이 항상 실행하게 할 수 있습니다. 안전한 코드의 예 DELETE STUDENTS WHERE..
Reliance on Untrusted Inputs in a SecurityDecision 보호 메커니즘을 우회할 수 있는 입력값 변조 정의 공격자는 다양한 방법을 통해 입력값(쿠키,환경변수,히든필드 등)을 조작할 수 있고 조작된 내용은 탐지되지 않을 수 있습니다. 따라서, 인증이나 인가 같은 보안 결정이 이런 입력값들을 기반으로 수행되면 보안을 우회할 수 있으므로 충분한 암호화 무결성 체크 등이 없는 경우 외부 입력값을 신뢰해서는 안됩니다. 방어 방법 상태 정보나 민감 데이터, 세션 정보 같은 중요한 정보는 서버에 저장하고 보안 절차도 서버에서 실행합니다. 안전하지 않은 예 Cookie[] cookies = request.getCookies(); for(int i = 0; i < cookies.leng..