안경잡이개발자

728x90
반응형

  이제 JSP로 강의평가(Lecture Evaluation) 웹 사이트 개발하기의 열 한 번째 포스팅을 합니다. 사실상 지난 시간에 모든 기능들이 다 구현이 되었어요. 이제는 기본적인 프로젝트 뼈대가 완성되었으므로 다양한 기능을 붙이거나, 보안적인 요소를 처리하는 것이 좋겠지요. 저는 이번 시간에서는 간단히 기초 시큐어 코딩 방법에 대해서 소개해드리려고 합니다. XSS를 방지하는 겁니다. XSS는 기본적으로 특정 사용자가 다른 사용자와 통신하는 과정에서 발생할 수 있는 해킹 방법입니다. 대표적으로는, 강의 평가 글 자체가 될 수 있습니다. 따라서 강의 평가 글을 출력할 때는 자바스크립트를 실행할 수 있는 문장을 모두 치환하면 됩니다.


  ▶ EvaluationDAO.java 내부의 write() 함수 수정하기


public int write(EvaluationDTO evaluationDTO) {

PreparedStatement pstmt = null;

try {

String SQL = "INSERT INTO EVALUATION VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0);";

pstmt = conn.prepareStatement(SQL);

pstmt.setString(1, evaluationDTO.getUserID().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));

pstmt.setString(2, evaluationDTO.getLectureName().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));

pstmt.setString(3, evaluationDTO.getProfessorName().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));

pstmt.setInt(4, evaluationDTO.getLectureYear());

pstmt.setString(5, evaluationDTO.getSemesterDivide().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));

pstmt.setString(6, evaluationDTO.getLectureDivide().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));

pstmt.setString(7, evaluationDTO.getEvaluationTitle().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));

pstmt.setString(8, evaluationDTO.getEvaluationContent().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));

pstmt.setString(9, evaluationDTO.getTotalScore().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));

pstmt.setString(10, evaluationDTO.getCreditScore().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));

pstmt.setString(11, evaluationDTO.getComfortableScore().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));

pstmt.setString(12, evaluationDTO.getLectureScore().replaceAll("<", "&lt;").replaceAll(">", " &gt;").replaceAll("\r\n", "<br>"));

return pstmt.executeUpdate();

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if(pstmt != null) pstmt.close();

if(conn != null) conn.close();

} catch (Exception e) {

e.printStackTrace();

}

}

return -1;

}


  위와 같이 설정해주면 게시글이 등록될 때 모든 꺾쇠가 치환되므로 기본적으로 자바스크립트 구문을 삽입하기가 어려워진답니다. 이미 시중에 나와있는 라이브러리가 많긴 한데, 대충 위와 같이 처리해도 XSS 공격이 까다로워지므로 나쁘지 않습니다. 테스트 결과는 다음과 같습니다.




  ※ 전체 실행 결과 (동영상 결과물) ※



728x90
반응형