6회차
Node.js로 구현하는 쇼핑몰 프로젝트 6회차 수업 요약 내용입니다.
댓글구현
CommentModel 생성
PostModel의 id값을 받아서 CommentModel의 post_id 필드로 저장
댓글 작성해도 페이지 변동없도록 ajax적용
Validation Check
웹사이트 데이터 유효성 검증 이유 : 프론트 단에서 이메일 양식에 맞는지 검증을 통과해도 브라우저에서 js끄고 form 전송시 DB에 저장 전 유효성 체크를 함 / 악의적인 데이터 삽입 방지
XXS
Cross Site Scripting 공격
글 등록시 location.href 와 같이 페이지를 이동하게 하거나 매 초마다 목표사이트를 공격하게 하는 스크립트 삽입, 또는 사이트 쿠키를 가로채고 전송
script 삽입, iframe삽입, img
해당 스크립트가 삽입된 페이지를 사용자가 방문시 스크립팅 실행
방어법
DB에 저장 전 특수문자를 필터링한다.
<, >, 을 html 특수문자 코드로 변환한다.
그 밖의 문자열은 지운다.
ex)
var html = “document”;
변환후
html = < script >….
Nodejs 의 경우 (npm install xss)
var xss = require('xss');
var html = xss('<script>alert("xss");</script>');
console.log(html);
// 참조 : https://www.npmjs.com/package/xss
CSRF
사용자가 자신의 의지와는 무관하게 글을 등록, 수정, 삭제 를 서버에 요청
2008년 옥션 해킹에도 사용된 기법
방어법 : 토근 발행 ( 글 작성 전 서버에서 생성한 토큰과 맞는지 확인 )
multer
웹파일 전송방식중 multipart/form-data 방식을 지원해주는 모듈 (npm install –save multer)
적용순서 1. DB에 저장될 필드 수정(PostModel) 2. npm install –save multer 3. uploads 폴더생성 4. router 처리 ( write, edit - post ) 5. view 처리 ( detail )
var upload = multer({ storage: storage });
multer 셋팅을 저장후
router.post(‘URL', upload.single(‘thumbnail')
// 라우터에서 적용
// thumbnail 필드명으로 파일을 받는다.
// 저장 ( routes/admin ) – write (get)
var product = new ProductsModel({
name : req.body.name,
thumbnail : (req.file) ? req.file.filename : "",
price : req.body.price,
description : req.body.description,
});
// 파일업로드시 파일이 존재하면 파일명을 thumbnail 필드에 저장
Last updated
Was this helpful?