게시판 만들기 _ 정렬기능 및 날짜검색기능
원래의 정렬기능과 날짜검색기능이 없는, 일반 검색만 구현된 게시판은 다음과 같다. IQ Spoofing 전체 제목 내용 작성자
원래의 정렬기능과 날짜검색기능이 없는, 일반 검색만 구현된 게시판은 다음과 같다. IQ Spoofing 전체 제목 내용 작성자
세션변수를 통해서 게시글을 본적이 없으면 조회수 카운트 증가 단, 쿠키를 지우게 될 경우 세션을 새로 발급받기에 조회수의 조작이 가능함. 이를 보완하는 방법은 이전의 좋아요 기능처럼 글에 대한 UID, IP등의 등록으로 가능
게시판 좋아요 기능은 원래있던 DB Table에 likes라는 column을 추가하여 추천을 누르게 되면 값이 하나씩 증가하도록 하면 된다. 다만 여기서 문제점으로는 그렇게되면 좋아요를 같은사람이 무한하게 누를 수 있다는것이다. 따라서 다음과 같은 검증과정이 필요하다 1. 로그인 여부 2. 좋아요 클릭 여부. 로그인 여부는 간단하게 검사가 가능하다. 세션 변수를 확인하면 된다. 다만 좋아요 클릭 여부는 서버에 UserID, Userid_id중 하나를 저장해야 한다. UserID는 물론 중복검사를 통해서 중복되는 아이디가 없겠지만 int 형식의 UserID_id가 더 빠르고 저장공간도 덜 차지할것이라 생각되므로 이를 사용하겠다. DB의 컬럼에는 배열을 저장하기 위해서 JSON형식으로 선언해주었다. 물론 J..
BLOB(Binary Large Object)과 CLOB(Character Large Object)는 데이터베이스에서 사용되는 대용량 데이터 유형이다. 이 두 데이터 유형은 데이터베이스에서 이진 데이터와 문자 데이터를 저장하기 위해 사용된다. 1. BLOB(Binary Large Object) BLOB는 이진 형태의 대용량 데이터를 저장하기 위한 데이터 유형이다. 이미지, 동영상, 사운드 파일 등이 이진데이터로 이루어져있으며 이들을 저장하는데 사용된다. 바이너리형태로 저장되게 되며 데이터 구조나 형식에 대한추가적인 처리가 필요하지 않다는 장점이 있다. 주요한 BLOB 유형에는 TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB이 있으며, 각각 저장 가능한 용량이 다르다. 2. CLOB(Ch..
1. DB에 파일을 저장하는 이유 2. 파일 저장 방법 2.1. 디렉토리에 파일 저장 2.2. DB에 파일 저장 3. 파일 다운로드 방법 1. DB에 파일을 저장하는 이유 File Upload 및 Download 취약점을 막는 가장 좋은 방법중 하나는 File 데이터를 DB에 업로드하는 것이다. DB에 PHP등을 까는 등 매우 특수한 경우를 제외하면 DB는 별도의 공간이므로 파일이 실행되지 않기 때문이다. 따라서 DB에 데이터를 CLOB/BLOB 형식으로 저장 할 것이다. 2. 파일 저장하는 방법 2.1. 디렉토리에 파일 저장 이미 구축해놓은 file업로드 코드는 다음과 같다. 위 코드의 저장 원리는 다음과 같다 - 파일 데이터를 post로 받음 - 받은 파일이 임시 디렉토리에 저장 - 파일의 정보 (이..
서버시간 가져오기 -> 아무런 데이터를 받는 요청을 보냄 -> Headers Date의 시간을 통해 서버시간 추정 가능 fetch('URL?id=3').then(r => { consol.log(r.headers.get('Date')); }); fetch('URL', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id: 3 }) }).then(r => { console.log(r.headers.get('Date')); }); 위와같이 요청을 보내 서버시간을 받음 unix time : 1970년 1월 1일 00:00:00 UTC부터 경과한 시간을 초 단위로 표현하는 방식 아래와 같은 방식으로 보..
파일 업로드 취약점은 파일 업로드를 하는 곳에서 발생하게 된다. 파일 업로드 파트의 소스코드는 다음과 같다. 서버에서 실행이 가능한 파일이 무엇인지를 확인해야 한다. 소스코드를 보면 파일의 확장자명을 소스코드 기반 필터링을 하고 있다. 확장자명을 가져오는 방법은 pathinfo() 함수를 사용하고 있다. 이 함수의 경우 작동 원리가 맨 뒤의 점으로 부터 그 이후의 문자를 확장자명으로 가져오는 것이다. 예를들어 1.2.3.4.56.78입력시 .78이 확장자명이 되게 된다. 이에 더해서 strtolower()함수를 사용해서 확장자명의 대소문자를 모두 소문자로 변환시켜 저장하고 있다. 따라서 다음과 같은 우회방법은 불가능하다. 1. PhP와같이 대소문자 혼합 2. jpg.php와 같은 이중확장자 3. phtm..
RDBMS : SQL을 사용해 데이터의 조회, 추가, 삭제 등의 작업 진행 NoSQL : SQL을 사용하지 않음. 매우 최적화된 저장공간이라는것, key값으로 데이어를 저장하는것이 RDBMS와의 차이점. DB별 개별문법을 가짐. 메모리를 기반으로 하는 DB인만큼 빠름. Mongo DB : JSON형태의 Document 저장. - Schema를 비정의 -> collection에(RDBMS의 table) 대한 정의가 불필요' - JSON형식의 쿼리 작성 - _id 필드가 Primary Key역할을 함. #RDBMS SELECT * FROM table_name WHERE column1 = 'data'and column2 < 10; #Mongo DB db.talbe_name.find({$and: [{column..