문득 떠올라서 적어봅니다.
필요조건: 관계형 데이터베이스
1. session id, unique id, expired 여부를 저장할 테이블을 만듭니다.
2. 글쓰기 요청시 각 session id에 대응하는 레코드를 만들고 unique id를 생성, 저장 후 글쓰기 페이지에 hidden attribute로 보냅니다.
3. 글이 POST될 때 해당 세션과 unique id로 AND 검색을 통해 레코드를 확인합니다. 일치하는 레코드가 존재하지 않거나 expired가 참이면 에러를 띄우고 돌려보냅니다.
4. 글을 등록하고 expired 필드의 값을 참으로 설정합니다.
submit 버튼을 여러번 클릭할 경우, POST로 날아오는 unique id가 동일하기 때문에 expired 된 글쓰기 세션은 사용할 수가 없게됩니다.
부가적으로는 글쓰기 페이지를 받아서 파싱하는 것은 어쩔 수 없겠지만 단순 자동 글쓰기 툴 정도는 차단할 수 있습니다.
발생할 수 있는 문제점: 레코드가 쌓여 table의 크기가 너무 커질 수 있음
해결 방안:
발급 일시에 대한 컬럼을 추가하고
1. maintenance script를 통한 주기적 정리
2. 익명 글쓰기를 허용하지 않는 경우 사용자 id 컬럼을 추가하여 처리
TAG 웹프로그래밍

댓글을 달아 주세요