【JavaScript】Web 보안에 대해
2850 단어 보안
크로스 사이트 요청 포제리 (CSRF)는 웹 응용 프로그램에 존재하는 취약점 또는 취약점을 이용한 공격 방법입니다.
게시판이나 문의 폼 등을 처리하는 웹 어플리케이션이, 본래 거부해야 할 다른 사이트로부터의 리퀘스트를 수신해 처리해 버립니다.
→참고
htps //w w. t 벽 d 미 c로. 코 m / 그럼 _ jp / 세쿠리 ty - 응 텃 겐 세 / 리세 아 rch - 르 포 rts / th 레 아 t - 소 치온 / csrf. HTML
■ CSRF에 대해 참고로 한 사이트
■ CSRF 공격의 예
【1】공격자가 함정을 건 웹사이트를 준비
【2】피해자가 함정 사이트를 열람
【3】함정 사이트를 열람한 피해자의 PC로부터, 피해자가 그 때 액세스 할 생각이 없는 Web 사이트의 게시판 등에 강제적으로 액세스 되고, 코멘트 등이 기입된다
【4】쓰여진 웹사이트의 접속 로그를 조사하면, 피해자의 PC로부터의 액세스 정보(IP 어드레스 등)가 기록되고 있다
■구체적인 대책으로서
「올바른 액세스 순서를 밟고 있어!」라고 증명할 수 있으면 좋다.
그 때문에 HTML의 태그나 쿠키, sessionstrage에 넣은 토큰을 맞대고 가짜 사이트로부터의 진입이 아닌 것을 증명.
올바른 액세스 절차를 거치는 요청에 대한 응답을 반환하여 가짜 사이트의 악성 요청으로부터 자신의 사이트를 보호합니다.
일치하는 인증서와 같은 것이 CSRF 토큰.
■공격을 상정한 대책(CSRF 대책)
CSRF 대책은 POST 처리시에 행한다.
[1] 로그인시 토큰 (난수)을 생성하여 세션에 저장
【2】 post 송신시는 form내에 그 토큰을 넣어, 서버내에서 요구 파라미터의 토큰과, session내의 토큰이 동일한지 어떤지 판단
[3] 동일하다면 요청을 수락합니다.
■코드 테스트의 어제 구현시, 참고로 한 사이트
■여기를 참고로 구현한 코드와 코멘트
【app.js】
//express-sessionモジュールを設定する
app.use(session({
//暗号化に利用するキーを設定
secret: 'secret key',
//毎回セッションを作成しない
resave: false,
//未初期化状態のセッションを保存しない
saveUninitialized: false,
cookie: {
//生存期間は3日
maxAge: 3 * 24 * 60 * 1000,
//httpsを使用しない
secure: false
}
}));
【user.js】
var express = require('express');
var router = express.Router();
var csrf = require('csrf');
var tokens = new csrf();
let db = require('../models/index');
router.get('/login', (req, res, next) => {
//新規で秘密文字とトークンを生成する
var secret = tokens.secretSync();
var token = tokens.create(secret);
//秘密文字をセッションに保存する
req.session._csrf = secret;
//トークンをCookieに保存する
res.cookie('_csrf', token);
var data = {
title:'User/Login',
form:{name:'',password:''},
content:'',
}
res.render('users/login', data);
});
router.post('/login', (req, res, next) => {
//秘密文字をセッションから取得する
var secret = req.session._csrf;
//トークンをCookieから取得する
var token = req.cookies._csrf;
// 取得したtokenをverify(確認)して同じであればpostメソッドを実行する。
// 確認が完了したtokenは確認した時点で破棄する。
if(tokens.verify(secret, token) === false)
{
throw new Error('Invalid Token');
}
//使用済みの秘密文字を削除する
delete req.session._csrf;
//使用済みのトークンを削除する
res.clearCookie('_csrf');
Reference
이 문제에 관하여(【JavaScript】Web 보안에 대해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/panopano/items/b92ea41333aeab80e803텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)