본문 바로가기
반응형

전체 글135

JS) SQL 삽입 소프트웨어 개발보안 보안 위협에 대응할 수 있는 소프트웨어를 개발하기 위한 일련의 보안 활동으로, 소프트웨어 개발 생명주기(SDLC)의 각 단계별로 요구되는 보안활동을 수행하는 것을 의미한다. SQL 삽입 데이터베이스와 연동된 웹 응용프로그램에서 입력된 데이터에 대한 유효성 검증을 하지 않을 경우, 공격자가 입력 폼 및 URL 입력란에 SQL 문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 보안약점을 말한다. 자바스크립트에서는 관계형 데이터베이스, NoSQL등 다양한 유형의 데이터베이스 시스템과 상호작용할 수 있는 라이브러리를 제공한다. - 데이터베이스 드라이버 : 클라이언트와 커넥터를 사용해 데이터베이스와 직접 상호작용 (mysql) 개발자가 직접 쿼리 문자열을 정의하고, 그 결과를 그대로 .. 2023. 2. 24.
JavaScript AWS SDK 브라우저에서 SDK를 사용하려면 HTML 페이지에 다음 스크립트 태그를 추가하기만 하면 됩니다. 2023. 2. 13.
보안결정을 신뢰할 수 없는 입력 값에 의존 - 응용프로그램이 외부 입력값(쿠키, 환경변수, 히든필드 등))에 대한 신뢰를 전제로 보호메커니즘을 사용하는 경우 공격자가 입력값을 조작할 수 있다면 보호메커니즘을 우회할 수 있게 된다. 시스템의 상태정보와 중요한 정보는 서버에만 저장한다. 중요한 정보를 클라이언트 쪽에 저장할 경우, 암호화와 무결성 검사를 거친 데이터만 저장되도록 한다. 외부입력과 관련된 검사가 자바스크립트를 통해 브라우저에서 이루어지더라도, 서버측에서 재검사를 한다. cookie 말고 session으로 안전하지 않은 코드 ▼ 안전한 코드 ▼ 2023. 2. 1.
SQL 삽입 공격 : Hibernate - 질의문 생성 시 상수 문자열만 사용한다. - 외부의 입력에 따라 질의문을 수정해야 한다면 인자를 받는 질의문을 상수 문자열로 생성한 후, 쿼리의 인자값을 setParameter(), set() 등의 메소드를 사용하여 설정한다. 안전하지 않은 코드 1 ▼ public void listHoney() { Session session = new Configuration().configure().buildSessionFactory().openSession(); try { Properties props = new Properties(); String fileName = "Hibernate.properties"; FileInputStream in = new FileInputStream(fileName); prop.. 2023. 2. 1.
안전하지 않은 리플렉션 - 동적 클래스 적재(loading)에 외부의 검증되지 않은 입력을 사용할 경우, 공격자가 외부 입력을 변조하여 의도하지 않은 클래스가 적재되도록 할 수 있다. - 외부의 입력을 직접 클래스 이름으로 사용하지 않고, 외부의 입력에 따라 미리 정한 후보(white list)중에서 적절한 클래스 이름을 선택하도록 한다. 안전하지 않은 코드 ▼ public void workType() { Properties props = new Properties(); // ... if( in != null && in.available() > 0 ) { props.load(in); if(props == null || props.isEmpty()) return; } Strong type = props.getProperty("t.. 2023. 2. 1.
Java의 properties - load 일반적으로 컴파일된 코드 외부에서 간단한 매개변수를 키-값-쌍으로 저장하기 위해 사용 java.util.Properties .properties 파일에서 키-값 쌍을 로드하는 예제 app.properties ▼ version = 1.0 name = TestApp date = 2016-11-12 catalog ▼ c1 = files c2 = images c3 = videos - .properties로 파일 명을 짓는게 좋으나, 필수는 아님 Properties instance 로 쉽게 load할 수 있다. String rootPath = Thread.currentThread().getContextClassLoader().getResource("").getPath(); String appConfigPath =.. 2023. 2. 1.
JS) eval() 을 사용하면 안되는 이유 연산식을 계산하기 위해 eval()을 호출하지 말 것 문자열로부터 eval()을 실행하는 것은 엄청나게 위험함. eval()을 사용하면 해커가 위험한 코드를 사용할 수 있다. eval()은 인자로 받은 코드를 caller의 권한으로 수행하는 위험한 함수 또한, 최신 JS엔진에서 여러 코드 구조를 최적화 하는 것과 달리 eval()은 JS인터프리터를 사용해야 하기 때문에 다른 대안들보다 느리다. 최신 JavaScript 인터프리터는 자바스크립트를 기계 코드로 변환한다. 즉, 변수명의 개념이 완전히 없어진다. 그러나 eval을 사용하면 브라우저는 기계 코드에 해당 변수가 있는지 확인하고 값을 대입하기 위해 길고 무거운 변수명 검색을 수행해야 한다. 또한 eval()을 통해 자료형 변경 등 변수에 변화가 일어.. 2023. 2. 1.
쿠키와 세션 쿠키는 민감한 정보를 다루기엔 위험하다. 하지만 세션은 서버가 직접 관리하므로 민감한 정보를 다루기에 더 적합하다. ‘로그인’ 정보 유지가 대표적이다. 세션 : 클라이언트가 웹 브라우저를 통해 서버에 접속한 후 용무를 처리하고 웹 브라우저를 닫아 서버와의 접속을 종료하는 하나의 단위를 세션이라고 한다. 즉, 클라이언트가 서버에 접속해 있는 동안 그 상태를 유지하는 것 세션은 웹 브라우저를 실행할 때마다 새롭게 생성된다. 유지시간이 만료되기 전에 새로운 요청이 들어오면 수명이 계속 연장됨. 웹 브라우저를 닫으면 삭제된다. 세션 유지시간 설정법1 : web.xml에서 설정 20 세션 유지시간 설정법2 : JSP 파일에서 sessison 내장 객체가 제공하는 setMaxInactiveInterval() 로그아.. 2023. 1. 31.
자바 ORM 표준 JPA 프로그래밍 - 기본편 OT JPA ? Java Persistence API 순수 JDBC 작성 → Jdbc Template, MyBatis → JPA JPA를 사용하면 sql 작성 안해도 됨 ! 코드도 간결해짐! JPA가 실무에서 어려운 이유는? 객체와 테이블을 올바르게 매핑하고 설계하는 방법을 몰라서! 목표 - 객체와 테이블 설계 매핑 객체와 테이블을 제대로 설계하고 매핑하는 방법 기본 키와 외래 키 매핑 1:N , N:1, 1:1 , N:M 매핑 실무 노하우 + 성능까지 고려 어떠한 복잡한 시스템도 JPA로 설계 가능! 목표 - JPA 내부 동작 방식 이해 JPA 의 내부 동작 방식을 이해하지 못하고 사용 JPA 내부 동작 방식을 그림과 코드로 자세히 설명 JPA가 어떤 SQL을 만들어 내는지 이해 JPA가 언제 SQL을 실행.. 2023. 1. 29.
쿠버네티스의 주요 컴포넌트 (1) 마스터용 컴포넌트 쿠버네티스는 근본적으로 클러스터를 관리한다. 클러스터는 여러대 컴퓨터를 하나의 묶음으로 다루는 것을 뜻하므로 여러 가지 컴포넌트를 포함한다. 마스터용 컴포넌트 1) etcd - 고가용성을 제공하는 키-값 저장소 - 필요한 모든 데이터를 저장하는 데이터베이스 역할 - etcd는 서버 하나당프로세스 1개만 사용할 수 있다. - 보통 etcd 자체를 클러스터링한 후 여러 개 마스터 서버에 분산해서 실행해 데이터의 안정성을 보장하도록 구성 ( 클러스터링 : 여러 대 컴퓨터를 연결해 시스템 하나처럼 구성하는 것 ) 2023. 1. 3.
반응형