본문 바로가기

포트폴리오 개발일지

(13)
2024-06-26 검색어 공백제한5 현재 문제점sql injection검색어 중간에 공백이 있는 경우 검색결과가 예상과 다름 예) 제목이 java joa인 게시물이 있을때 javajoa로 검색하면 검색 결과가 없다고 나온다.예) 제목이 java와 java joa인 게시물이 있을때 java(공백)으로 검색하면 java joa만 나온다.현재 검색어 중간 또는 앞 뒤에 공백이 포함되어 있을 경우 검색결과의 일관성이 없다.사용자마다 검색 습관이 다를수 있어서 이 문제를 꼭 해결해보고 넘어가야겠다고 생각했다.db에는 공백이 포함된 데이터가 저장되어 있고 현재 검색을 할때title like concat('%', #{keyword}, '%')로 검색을 수행한다. MyBatis에서 #{}을 사용하면 ""을 붙여 바인딩 하기 때문에 검색어가 java라면t..
2024-06-23 검색어 공백제한 4(이게 진짜 4번째) 저번 일지 제목을 4라고 썼는데 이게 진짜 4번째다. 저번 포스팅을 수정하려고 했으나 서식이 바뀌는 문제가 있어서 수정 안하는걸로..현재 문제점1. 공백 검색 및 sql 인젝션에 취약함모든 유효성 검사를 서버측에서 하는것이 아닌 클라이언트와 분배하기로 했으므로 클라이언트 측에서 types와 keyword를 검사하기로 했다. 제목 검색 내용 검색 검색어 : Search 스크립트를 통해 form 태그의 submit ㅈ이벤트가 발생하면 input id="keyword"의 값을 앞뒤 공백을 제거하여 let keyword에 대입한다.input id="title"의 checked 여부를 let title에 대입한다.input id="content"의 checked 여부를 let..
2024-06-21 검색어 공백제한4 현재 문제점1. 공백 검색 및 sql 인젝션에 취약함해결해보기서버측에서 유효성 검사를 하기로 결정했으므로 이제 어떻게 할것인가를 고민해야 한다.아래는 현재 상황이다.@NotBlank로 검색어를 값으로 가지는 SearchDTO의 변수 keyword의 유효성을 검사하려 함notes table의 전체 데이터 확인 가능한 getList() 있음(getSearchList()로 인해 지금은 사용 안함)SearchDTO(검색 조건, 검색어)를 매개변수로 받는 getSearchList() 있음mybatis로 구현 를 사용해서 SearchDTO의 types에 값이 없으면 전체 조회를 함@NotBlank 어노테이션을 SearchDTO 의 keyword 변수에 적용하는 순간 keyword에 값이 없거나 공백만 있다면 아래와..
2024.06.15 검색어 공백 제한하기 2(고민) 현재 문제점1. 공백 검색 및 sql 인젝션에 취약함현재 프로젝트 상황1. @NotBlank로 검색어를 값으로 가지는 SearchDTO의 변수 keyword의 유효성을 검사하려 함2. notes table의 전체 데이터 확인 가능한 getList() 있음(getSearchList()로 인해 지금은 사용 안함)3. SearchDTO(검색 조건, 검색어)를 매개변수로 받는 getSearchList() 있음 1. mybatis로 구현 ``를 사용해서 SearchDTO의 types에 값이 없으면 전체 조회를 함BindingResult의 결과에 따라 에러가 있으면(keyword가 없으면) getList()를 실행하고, 없으면 getSearchList()를 실행하면 간단하게 해결될것 같았는데 그러면 getSearc..
2024-06-13 검색어 공백 제한하기 1 현재 문제점1. 공백 검색 및 sql 인젝션에 취약함해결해보기현재 사용자가 입력하지 못하도록 해야 하는것이 무엇인지 생각해봤다.1. null2. ""3. " "위 세가지가 가장 기본적인게 아닐까 한다.필터를 구현하거나, 바인딩 과정에서 하나씩 체크하는 방법도 있을것 같은데 지금 hibernate 라이브러리를 사용하고 있기 때문에 어노테이션을 사용해서 해보려 한다.어노테이션 중 관련있는걸 세가지 찾았는데 어노테이션설명@NotNullNull 불가능@NotEmptyNull , 빈 문자열 불가능@NotBlankNull, 빈 문자열, 공백만 있는 문자열 불가능이 중에서 Null, 빈 문자열, 공백만 있는 문자열은 검색에 전혀 필요가 없기 때문에 @NotBlank를 사용하기로 했다.SearchDTO를 수정했다.@D..
2024-06-12 검색조건 유지 두번째 방법 DTO 반환하기 현재 문제점1. jsp 의 검색 기능이 모양만 갖춰져 있고 기능 구현이 덜 되어 있음2. 공백 검색 및 sql 인젝션에 취약함3. 사용자가 검색했던 검색 조건 반환이 이루어지지 않음(해결중)이전 내용이전 2024-06-09 에서는 사용자가 검색을 하면 list.jsp 에서 param으로 검색어를, paramValues 로 검색 조건을 찾아서 검색 결과 응답 페이지에서도 사용자가 검색했던 조건들을 유지할수 있게 했다.이번에는 사용자가 검색했던 조건들이 서버측에서 SearchDTO 의 형태로 받기 때문에 응답에도 SearchDTO를 반환하여 list.jsp 에서 SearchDTO를 이용하여 검색조건 유지가 되도록 해봤다.SearchDTO 보기@Data @ToString @Builder @NoArgsCo..
2024-06-09 view 구현 & 검색조건 유지(view 에서 반환받기) 현재 문제점1. jsp 의 검색 기능이 모양만 갖춰져 있고 기능 구현이 덜 되어 있음2. 공백 검색 및 sql 인젝션에 취약함3. 사용자가 검색했던 검색 조건 반환이 이루어지지 않음 > 우선 위 문제점을 해결하기 이전에 view 까지 구현을 하고 문제점을 해결하려고 한다.view 구현하기1. 현재 검색을 하는 view 부분이 형태만 있고 구현이 되어 있지 않아 list.jsp의 구현을 마무리 하려고 한다.view 구현 펼치기 note list 제목 검색 내용 검색 검색어 : Search ${dto.id} ..
2024-06-07 노트검색 1.3 오류해결 현재 문제점localhost:8080/note/list 를 요청하면 500번 오류와 함께 mybatis의 types 표현식이 null로 평가된다는 오류가 발생!해결해보기1. 우선 mybatis의 types 가 null 이어서 오류가 발생하고 있다고 로그에 나오기 때문에 NoteMapper.xml의 내용에 문제가 있을 것으로 추측되지만 혹시 몰라 컨트롤러, 서비스부터 확인했다. 2. 컨트롤러와 서비스를 확인한 결과 types 변수를 가지고 있는 SearchDTO를 매개변수로 받기만 할뿐 null과 관련된 코드는 전혀 없었다. 3. 다음으로 NoteMapper.xml을 화인하고 잘못된 부분이 확인되어 수정했다. 내용 보기 select * from notes ..