본문 바로가기
반응형

Web Security22

JS) eval() 을 사용하면 안되는 이유 연산식을 계산하기 위해 eval()을 호출하지 말 것 문자열로부터 eval()을 실행하는 것은 엄청나게 위험함. eval()을 사용하면 해커가 위험한 코드를 사용할 수 있다. eval()은 인자로 받은 코드를 caller의 권한으로 수행하는 위험한 함수 또한, 최신 JS엔진에서 여러 코드 구조를 최적화 하는 것과 달리 eval()은 JS인터프리터를 사용해야 하기 때문에 다른 대안들보다 느리다. 최신 JavaScript 인터프리터는 자바스크립트를 기계 코드로 변환한다. 즉, 변수명의 개념이 완전히 없어진다. 그러나 eval을 사용하면 브라우저는 기계 코드에 해당 변수가 있는지 확인하고 값을 대입하기 위해 길고 무거운 변수명 검색을 수행해야 한다. 또한 eval()을 통해 자료형 변경 등 변수에 변화가 일어.. 2023. 2. 1.
적절한 인증 없는 중요기능 허용 - 안전하다고 확인된 라이브러리나 프레임워크를 사용한다. 즉, OpenSSL 이나 ESAPI의 보안기능을 사용한다. 안전하지 않은 코드 ▼ public void sendBankAccount(String accountNumber, double balance) { BankAccount account = new BankAccount(); account.setAccountNumber(accountNumber); account.setToPerson(toPerson); account.setBalance(balance); AccountManager.send(account); } 안전한 코드 ▼ public void sendBankAccount(HttpServletRequest request, HttpSession s.. 2022. 11. 21.
무결성 점검 없는 코드 다운로드 - 원격으로부터 소스 코드 또는 실행파일을 무결성 검사 없이 다운로드하고, 이를 실행하는 경우 host server의 변조, DNS spoofing 또는 전송 시의 코드 변조 등의 방법을 이용하여 공격자가 악의적인 코드를 실행할 수 있다. - SW의 자동 업데이트와 같이 다운로드될 코드를 제공할 때는 코드에 대한 암호화된 시그니처를 사용하고 클라이언트가 시그니처를 검증하도록 한다. 안전하지 않은 코드 ▼ URL[] classURLs = new URL[]{new URL("file:subdir/")}; URLClassLoader loader = new URLClassLoader(classURLs); Class loadedClass = Class.forName("MyClass",true,loader); 안전한.. 2022. 11. 21.
프로세스 제어 - 신뢰되지 않은 소스나 신뢰되지 않은 환경으로부터 라이브러리를 적재하거나 명령을 실행하면, 악의적인 코드가 실행될 수 있다. - 프로그램 내에서 라이브러리를 적재할 때 절대경로를 사용한다. 안전하지 않은 코드 ▼ Runtime.getRuntime().loadLibrary("libraryName"); 안전한 코드 ▼ Runtime.getRuntime().loadLibrary("/usr/lib/libraryName"); 해시테이블을 이용해 정해진 이름의 라이브러리만이 정해진 절대경로를 통해 로딩 가능하도록 설계 import java.io.*; import java.net.URLDecoder; import java.sql.*; import java.util.*; import javax.servlet.*; p.. 2022. 11. 18.
크로스 사이트 스크립트 공격 취약점: DOM - 외부에서 입력되는 스크립트 문자열이 웹페이지 생성에 사용되면 생성된 웹페이지를 열람하는 사용자에게 피해를 입힐 수 있다. - JSP의 document.write()메소드와 같이 JSP의 DOM 객체 출력을 수행하는 메소드의 인자값으로 외부의 입력을 사용할 경우 위험한 문자를 제거하는 과정이 수행되어야 한다. 1. 특수 문자 치환 String name = request.getParameter("name"); if( name != null ) { name = name.replaceAll("",">"); name = name.replaceAll("&","&"); name = name.replaceAll("\"","""); name = name.replaceAll("\'","'"); name = n.. 2022. 11. 18.
반응형