본문 바로가기

IT/Java

CSRF 조치 방안_ RSA 개인키를 이용한 로그인

본문 매개변수가 조회에서 허용됨

위험: 사용자 이름, 비밀번호, 머신 이름 및/또는 민감한 파일 위치 등과 같이 웹 애플리케이션에 대한 민감한 정보를 모으는 것이 가능합니다.

 속기 쉬운 사용자를 설득해서 사용자 이름, 비밀번호, 신용카드 번호, 주민등록 번호와 같은 민감한 정보를 제공하도록 하는 것이 가능합니다.

수정사항: 조회 문자열로 전송되는 본문 매개변수를 허용하지 마십시오.

이유: 오른쪽에 있는 테스트 응답이 왼쪽의 원래 응답과 동일하며, 가상의 '방문경로' 헤더가 포함되어 있더라도 이는 CSRF(Cross-Site Request Forgery) 시도가 성공했음을 나타내므로 테스트 결과에서 취약성이 확인됩니다.


<%@page import="java.util.Locale"%>    

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

<%@page import="java.security.KeyFactory"%>

<%@page import="java.security.KeyPair"%>

<%@page import="java.security.KeyPairGenerator"%>

<%@page import="java.security.PrivateKey"%>

<%@page import="java.security.spec.RSAPublicKeySpec"%>

<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<%

    String language = Locale.getDefault().getLanguage();

    if (language.equals("ko")) {

        language = "KOR";

    } else if (language.equals("en")) {

        language = "ENG";

    } else {

        language = "LOC";

    }

    

    int KEY_SIZE = 1024;

    KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");

    generator.initialize(KEY_SIZE);

    

    KeyPair keyPair = generator.genKeyPair();

    KeyFactory keyFactory = KeyFactory.getInstance("RSA");


    PrivateKey privateKey = keyPair.getPrivate();

    

  // 세션에 공개키의 문자열을 키로하여 개인키를 저장한다.

    session.setAttribute("__rsaPrivateKey__", privateKey);

%>



참고: http://egloos.zum.com/kwon37xi/v/4427199