<오늘>
1.sql injection공격기법 - 막으려면 어떻게?
statement객체 썼을때 어떤 문제가 발생하는지
2.어플리케이션의 퍼포먼스 고려 - 프로그램 실행시간 줄일수있을지 /오브젝트 풀링
3.쿠키 - 클라이언트사이드 저장소 이용하면 어떤 과정으로 상태 유지 가능한지
리플렉션
회원가입 인증
미들티어가 두개 이상으로 쪼개지면 3tier가
->N-tier로
모델2에 M을 적용하면 MVC패턴이 완성
각각의 레이어에서 의존하고 있는 레이어의 객체를 생성함.controller-service객체
B.L - dao객체
DECODE 함수
if else 와 비슷한 기능을 수행.
예) DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3...)
DATA_TYPE컬럼의 NUMBER는 INTEGER로 바꾸고 나머지는(else) String으로 바꿔라.
int, Integer - 기본형, 객체참조형
null을 허용하는지 안하는지 차이. int는 null못담음
-> Integer 써야된다.
프레임에서는 데이터 최소단위가 object이다.
ibatis에서 queryforObject에서 리턴타입 Object. 다 객체참조형으로 리턴됨.
(int)로 캐스팅 할 수 없음. 오토언박싱가능해서 됬던것. jdk1.4이하는 실행안됨.
앞으로 자주쓸거라 코드조각으로 저장해놓음.
가져올때는 보기->코드조각으로 가져오면됨.
로그인 - statement객체 썼을때
-> 관리자 되서 테이블 날릴수있음
sql injection 막는 방법
1. ★입력데이터 검증. 데이터 처음 받는 곳에서 validation빡세게 하는것.
2. dao단에서 다시 검증.단순한 리터럴로 실행되게. 연산자나 쿼리실행문이 아니라.
OR, delete를
=>prepared Statement 사용
? - 쿼리 파라미터. 데이터만 넘어간다는 것. 예약어가 아니라 그냥 문자임.
statement - 쿼리 실행하면서 컴파일. 동적으로 쿼리 실행
prepared - 컴파일하는 과정에서 미리 쿼리 가지고 있다가 실행할때 데이터만 넣어서 실행.
이미 쿼리가 컴파일됬기 때문에 중간에 연산자나 예약어 넣는게 불가능한것.
커넥션 연결할때 쿼리문 먼저 넘겨주고(라인23) 나중에 실행할때 파라미터만 넣음(라인26)
한국인터넷진흥원(공공사이트에서 웹개발할때 지켜야되는것들 알려주고 있음)
자료실-기술안내서가이드
웹상에서 흔하게 일어나는 공격들
OWASP - 웹 상에서 흔하게 일어나는 공격 모아놓은것.
부호화(encode/decode-복호화)
: %23 (Percent Encoding/ URL encoding 데이터를 %로 시작하는 문자로 바꿈, Base64(64개 문자-영문자,숫자,+,/ 로 데이터 표현)
: 데이터를 전송하거나 저장하기 위해 시스템이 인지할수있는데이터 표현방식으로 바꾸는 작업
암호화(encrypt/decrypt-복호화)
: 허가되지 않은 유저가 데이터를 읽을수 없도록 데이터 표현방식을 바꾸는 작업
인코딩
- 키 사용안함, 누군가가 읽을 수 있게 하기 위한 것.
단방향(해시함수) : 다양한 입력데이터를 '일정 길이'의 해시코드로 생성할때 사용
- 비밀번호 저장할때 많이 사용함(근데 복호화 안되서어떻게 해도 못읽음 - 비밀번호 까먹으면 찾기 못하고 새로 만들어야됨)
해시 함수(hash function)는 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다. 해시 함수에 의해 얻어지는 값은 해시 값, 해시 코드, 해시 체크섬 또는 간단하게 해시라고 한다.
MessageDigest - message를 해시함. 해시함수 객체 만들때 사용
암호화 더 정교하게 하기위해/비둘기집에 충돌하지 않게 하기위해. 한 집에 한마리씩 넣을수있는데 집이 10개,비둘기 12마리면 어떤곳은 2마리들어가야됨 - 충돌
넣을거 너무 길면 해시코드 같아질수있음...(길이제한있어서 그 이상되면 안바뀜-동일한값으로 들어감) 비번 다르게 했는데 바꿔서 들어갈때 똑같은걸로 들어갈 수 있음
해결 : SHA-를 최대한 늘려놔야됨 , plain 길이제한.(비밀번호 5~12 사이로 하세요)
ASE : 비밀키 하나로 암복호화하기때문에 키를 공유해야됨-키분배문제
RSA : 키분배문제 해결. 하지만 시간이 오래걸림
칼국수집에서 칼국수 나오기까지 가장 오래걸리는 부분 - 면뽑기
웹 어플리케이션에서 가장 오래걸리는 부분은?
소요시간
1. 네트워크 타야되는 부분에서의 소요시간 - Latency time
2. 서버 안에서 처리되는 부분 - cpu 성능좋고 알고리즘 잘짜면 시간단축 가능 - processing time
1번은 우리의 소요시간 아님
-> 우리가 줄일 수 있는것 - 2,3번
면뽑기 - 3번(커넥션 생성하고 쿼리문 날리고 받아와서 연결끊고...)
-> 커넥션을 미리 생성해놓으면 된다 - Pooling
연결부분을 미리 처리해놓는다면?(칼국수 면 미리 뽑아놓으면)
아파치 사이트 - commons
기존 - 드라이버 로딩, 연결이 따로 떨어져있음
DataSource쓰면 로딩,연결 한번에. 드라이버 로딩하고driverManager로 연결하는거 불편해서 나온것.
미리 connection생성해 두고 db에 접근하려는 사용자에게 미리 생성되있는 connection 제공하고 돌려받음. 이 connection들을 모아놓는 곳이 connection pool이고 datasource는 connection pool을 지원하기 위한 인터페이스.(connection pool-알바생)
2초동안 기다리다가
없으면 새로 만들어서 주되 10개는 넘지마라
웹어플리케이션에서 pooling은 필수
퍼포먼스,소요시간 키워드 넣어서 말하기
리플렉션 통해서 동적으로 파싱
직접 코딩 안하고 db에서 만들어서 가져왓음
리플렉션 쓰면 가져올 수 있다.