SQL 질문 드립니다.
273
작성자 없음
작성한 질문수 0
public int memberUpdate(MemberVO vo) {
String SQL = "update member set age='" + vo.getAge() + "', email='" + vo.getEmail() + "', phone='" + vo.getPhone() + "' where num='" + vo.getNum() + "'";
int cnt = -1;
getConnect();
try {
stmt = conn.createStatement();
cnt = stmt.executeUpdate(SQL);
} catch (Exception e) {
e.printStackTrace();
} finally {
dbClose();
}
return cnt;
}안녕하세요 강사님 저는 사이버 보안을 공부하는 학생입니다. MVC2 까지 듣고 문득 SQL인젝션이 가능한지 궁금해 실험해보니 preparedStatement를 사용하고 있어서 특정한 상황이 아닌 이상 발생하지 않는다는 걸 알게되었습니다. 그래서 Statement를 사용하면 인젝션이 성공하는지 궁금해 실험해봤는데 코드가 안전해서 그런건지 제가 실력이 부족해서인지 모르겠지만 인젝션에 계속 실패했습니다.
버프 스위트인 프록시 도구로 phone 또는 mail 파라미터 값을 조작했는데요
이해가 안가는 부분이 phone 파라미터에 ' or 1=1; # 이 쿼리를 사용하면 주석이 작동되어서 모든 테이블의 phone 컬럼이 1로 바뀌는데 ' ; update member set phone=010-4444-4444 where num=[일련번호]; # 이 쿼리를 사용하면 주석이 작동하지 않아 인젝션이 성공하지 않습니다. 혹시 무엇때문인지 아신다면 도움 부탁드립니다!
답변 1
0
안녕하세요, 인프런 AI 인턴이에요. SQL 인젝션에 대한 실험을 진행하신 것 같네요.
먼저, Statement를 사용하면 SQL 인젝션에 취약하다는 것은 맞습니다. 하지만, PreparedStatement를 사용하면 인젝션에 대해 안전하다고 알려져 있습니다.
문제 상황을 보면, ‘ or 1=1; # 이 쿼리는 주석 처리가 되고 전체 테이블의 phone 컬럼이 ‘1’로 바뀌는 반면, ‘ ; update member set phone=010-4444-4444 where num=[일련번호]; # 이 쿼리는 주석 처리가 되지 않아 인젝션이 실패한다고 하셨습니다. 이렇게 되는 이유는 Statement를 사용하여 쿼리를 작성하면 특수 문자를 문자 그대로 인식하기 때문입니다. 하지만, PreparedStatement를 사용하면 자동으로 특수 문자를 이스케이프 처리하여 쿼리를 실행하게 됩니다. 따라서, PreparedStatement를 사용하면 안전하게 쿼리를 실행할 수 있습니다.
제시해주신 쿼리 ’ ; update member set phone=010-4444-4444 where num=[일련번호]; # 이 쿼리 역시 인젝션에 취약합니다. 하지만, PreparedStatement를 사용하게 되면, ?를 사용해서 쿼리를 작성할 수 있습니다. 이렇게 하면, ?에 해당하는 값이 자동으로 이스케이프 처리되어 안전하게 쿼리를 실행할 수 있습니다.
따라서, PreparedStatement를 사용하시면 SQL 인젝션에 대한 안전성이 보장되며, ?를 사용해서 쿼리를 작성하시면 특수 문자를 이스케이프 처리해서 안전하게 쿼리를 실행할 수 있습니다. 참고하시기 바랍니다.
WEB-INF 파일 관련 53강 에러발생
0
210
2
질문드립니다.
0
204
2
질문이있습니다.
0
151
2
bin폴더가 존재하지않아요
0
209
2
Mysql 이클립스랑 연동하는 부분에서 ...
0
204
2
response.sendRedirect / forward
0
244
2
Export하기
0
148
1
초기 설정
0
172
2
콘솔에 출력이 안됩니다.
0
194
2
mysql 실행안됨
0
204
1
stop.bat 실행오류
0
143
1
mysql startup.bat 오류
0
218
2
34강 질문 있습니다!
0
195
2
전자정부프레임워크
0
309
2
22강 에러관련 짊문입니다
0
181
1
강의 20강 질문 및 오류관련
0
214
1
전자정부프레임워크 질문입니다.
0
242
1
My sql 비밀번호 설정 오류
1
485
1
화질이 계속 720p인데 1080은 안되는건가요?
0
338
1
53강 후반부 경로
0
292
2
오류가 발생하였는데 왜 일까요...?
0
427
1
mysql 설정에서 키가 먹지 않습니다
0
351
2
13강 test.jsp 질문 드려요
0
353
1
3강 mysql 질문입니다
0
326
1





