SQL인젝션공격이란??
->sql의 조각을 입력하는것
where id = 'aaa' and pass = 'bbb' 입력이 있는데
aaa에 aaa'-- 를 쓰면 where id = 'aaa' -- 'and....
오라클에서는 --가 주석처리이기 때문에 사실 pass워드부분은 생략이 된 것이므로
id만 입력해도 로그인이 가능해진다...
자바스크립트는 엔진이 3개가 존재한다(dom엔진 , 랜더링엔진 , 해석기) ->그래서 필요한게 style태그와 script태그
statement와 expression의 차이 (문 과 식)
실행하는것 - > expression :식
선언해놓는것 - > statement : 문
호이스팅이 일어나는 이유는 문들을 먼저 선언하는것을 처리하기 때문이다.
연산자는 실행될때 처리하기 때문에 var로 선언해둔것에 연산자는 나중에 처리되기떄문에 문을 처리할떄 처리되지 않는다.
sql도 sql문이라고 하기때문에 함수를 선언하는것과 같다.
preparedStatement의 ?에는 함수에 인자를 넣는것이라 생각하면 되고
statement는 sql문자체이기때문에
함수에 인자만 수정할수있는 preparedStatement가 원본 sql을 훼손시키지 않아 sqlInjection같은것을 예방할수있다(보안이좋음)
지금까지 정리
1. 커넥션이 안전해야한다.
2. 빨라야한다. ->sql의 실행계획이라는것을 볼줄 알아야한다.
3. preparedStatement만 써야한다
이중 1번과 3번을 처리해주는것이 Mybatis이다!
마이바티스에서 #을 많이 쓰는데 $는 절대 안쓰는게 좋다(statement처리가 되기 때문에..)
-> 그래서 필요한게 동적 dynamic SQL이 필요하다!