java database connectivity?
현재 상태 :
*DAO와 DBMS
createDate 수정
date 수정
delete에 암호 추가
where 절에 입력한 %s를 비번으로 사용하게 되면 해킹쉬움 그러면 안됨 ~!
sQL 삽입 공격 방어하기
// SQL 삽입 공격
// => 입력 문자열에 SQL 명령을 삽입하여 프로그램의 의도와 다르게 데이터를 조작하는 행위.
// => 사용자가 입력한 값을 가지고 SQL 문장을 만들 때 이런 문제가 발생한다.
// => 예를 들어 이 예제를 실행할 때 다음과 같이 입력해 보라!
// 제목? aaaa
// 내용? bbbb'), ('haha', 'hoho'), ('hehe', 'puhul
//
// 위에서 준비한 SQL 문에 값을 설정한다.
// => ? : 값이 놓일 자리를 의미한다. 'in-parameter' 라 부른다.
// => in-parameter 에 들어갈 값의 타입에 따라 적절한 setXxx() 메서드를 호출한다.
//
stmt.setString(1, title);
stmt.setString(2, contents);
// => 이미 SQL 을 준비한 상태이기 때문에 실행할 때는 SQL를 줄 필요가 없다.
// => setXxx()로 설정된 값은 단순한 텍스트로 처리한 후
// SQL을 실행할 때 파라미터로 전달되기 때문에
// SQL 삽입 공격이 불가능 하다.
int count = stmt.executeUpdate();
prepared 로 미리 sql을 준비하고 , set, execute 실행. . sql 조작 불가 ,,,,,
myapp 수정
47. SQL 삽입 공격
1. 입력값으로 sql 생성할 때
update myapp_board set
title ='%s',
cotent='%s'
where category=%d and board_no=%d and password='%s'
1111' or '1'='1' 라고 입력하면
and password='1111' or'1'='1' 로 sql 조작 가능
=> 사용자가 값을 입력할 때 SQL 문법에 영향을 끼치는 문장을 삽입하여 공격하는 해킹 기법
해결책: 2. 입력값과 SQL문을 분리 처리
2. 입력값과 SQL문을 분리 처리 (? : inparameter)
update myapp_board set
title =?,
cotent=?
where category=? and board_no=? and password=?
*in-parameter 값 넣기:
PreparedStatement stmt = con.prepareStatement(SQL);
stmt.setXXX(1, 값); //(in-parameter 번호(1부터 시작), in-parameter에 들어갈 값))
stmt.setXXX(2, 값);
비밀번호 sha1
비번은 단 방향임 돌아올 수 없음
dao에 추가하기.
48. 외부 키(Foreign key) 사용하기
Member에 createdDate 추가 (게터세터 추가)
memberdao findby 수정
조인을 이용하여 외부 테이블의 값을 가져오는 방법 - 보드랑 멤버 번호
49.로그인 -이메일 & 비밀번호 적용
로긴 리스너 생성
리스너들 전체 수정
'[네이버클라우드] 클라우드 기반의 개발자 과정 7기 > 웹프로그래밍' 카테고리의 다른 글
[NC7기-65일차(7월26일)] - 웹프로그래밍 46일차 (0) | 2023.07.26 |
---|---|
[NC7기-64일차(7월25일)] - 웹프로그래밍 45일차 (0) | 2023.07.25 |
[NC7기-62일차(7월21일)] - 웹프로그래밍 43일차 (1) | 2023.07.21 |
[NC7기-61일차(7월20일)] - 웹프로그래밍 42일차 (0) | 2023.07.20 |
[NC7기-60일차(7월19일)] - 웹프로그래밍 41일차 (0) | 2023.07.19 |