[SW개발보안] 개발보안 기타 정리 내역2
적절한 인증 없는 중요 기능 허용
회원정보 변경 신청 페이지
<form action="modify.do" method="post" onsubmit="return passwordCheck()">
<fieldset >
<legend><b>회원정보수정</b></legend>
<table>
<tr>
<td class="td01" ><label for="userId" class="label01">사용자ID </label></td>
<td><input type="text" id="userId" name="userId" class="loginInput" value="${member.userId}" readonly="readonly"/></td> ⇐ 사용자 ID를 편집(수정)할 수 없도록 제한
<td><span class="error"><form:errors path="MemberModel.userId" /></span></td>
</tr>
<tr>
<td class="td01" ><label for="userName" class="label01" >회원이름 </label></td>
<td><input type="text" id="userName" name="userName" value="${member.userName}" class="loginInput"/></td>
<td><span class="error"><form:errors path="MemberModel.userName" /></span></td>
</tr>
<tr>
<td class="td01" ><label for="oldUserPw" class="label01">기존비밀번호 </label></td>
<td><input type="password" id="oldUserPw" name="oldUserPw" class="loginInput"/></td>
<td><span class="error"><form:errors path="MemberModel.userPw" /></span></td>
</tr>
<tr>
<td class="td01" ><label for="userPw" class="label01">신규비밀번호 </label></td>
<td><input type="password" id="userPw" name="userPw" class="loginInput"/></td>
<td><span class="error"><form:errors path="MemberModel.userPw" /></span></td>
</tr>
<tr>
<td class="td01" ><label for="userPwCheck" class="label01">신규비밀번호확인 </label></td>
<td><input type="password" id="userPwCheck" name="userPwCheck" class="loginInput"/></td>
<td></td>
</tr>
<tr>
<td colspan="3" align="center">
<br/><br/>
<input type="submit" value="확인" class="submitBt"/>
<input type="reset" value="재작성" class="submitBt" />
</td>
</tr>
<tr>
<td colspan="3" align="center"><a href="<%=request.getContextPath()%>/login.do">로그인 페이지로 돌아가기</a></td>
</tr>
</table>
</fieldset>
</form>
회원정보 변경 처리 ⇒ 교재에 나와있는 코드
@RequestMapping(value = "/modify.do", method = RequestMethod.POST) ↱ 사용자 화면에서 입력한 값이 저장
public ModelAndView memberModifyProcess(@ModelAttribute("MemberModel") MemberModel memberModel, BindingResult result, HttpServletRequest request, HttpSession session) {
ModelAndView mav = new ModelAndView();
String userId = (String) session.getAttribute("userId"); ⇒ #1 세션에서 사용자 ID를 추출
String passwd = request.getParameter("oldUserPw"); ⇒ #2 요청 파라미터에서 패스워드를 추출
System.out.println("passwd: " + memberModel.getUserPw());
if (loginService.checkUserId(userId, passwd) == null) { ⇒ #1, #2 정보가 존재하는지 확인
mav.addObject("errCode", 1); 로그인한 사용자가 요청한 것인지를 확인
mav.addObject("member", memberModel);
mav.setViewName("/board/member_modify");
return mav;
}
// #4 요청한 사용자와 로그인한 사용자가 동일한 사용자인지를 재인증하는 코드를 추가
String pUserId = request.getParameter("userId");
if (pUserId == null || !pUserId.equals(userId)) {
// 일치하지 않으면 오류 처리와 함께 반환
}
if (service.modifyMember(memberModel)) { ⇒ #3 화면에서 전달된 값으로 회원정보를 업데이트
mav.setViewName("redirect:/board/list.do"); → 화면에서 전달된 사용자 ID를 기준으로 수정 가능
session.setAttribute("userName", memberModel.getUserName());
return mav;
} else {
mav.addObject("errCode", 2);
mav.setViewName("/board/member_modify");
return mav;
}
}
적절한 인증없는 중요기능 허용
부적절한 인가
취약한 암호화 알고리즘 사용
인코딩/디코딩 기능을 이용한 암복호화 기능 구현
function encrypt(String source) {
return base64encoding(source);
}
암호알고리즘, 블럭운영모드, 패딩모드
~~~ 블럭운영모드
AES / CBC / PKCS5Padding
~~~ 알고리즘명 패딩모드
코드 서명 및 검증
Server Client
code ~~~~~~~~~~~~~~~~~~~~~~~~~> code
-> H(code) -> H(code) -------------------------+ 일치
-> Spri[H(code)] ~~~~~~~~~~> Spri[H(code)] -- Spub --> H(code) --+
잠시 쉬고, 14시 15분에 이어서 진행하겠습니다.
오류상황 대응 부재
CASE1 ⇒ catch 블록이 비어 있는 경우
try {
:
예외가 발생할 수 있는 코드
:
} catch (예외 e) {
// 예외 처리 로직이 생략
}
CASE2 ⇒ 예외에 대한 처리가 없는 경우
try {
:
예외1가 발생할 수 있는 코드
:
예외2가 발생할 수 있는 코드
:
} catch (예외1 e) {
예외1에 대한 처리
}
빠른 연산자 (circuit operator)
( T ) | ( T/F ) = T
( T ) || ( ) = T
( F ) & ( T/F ) = F
( F ) && ( ) = F
부적절한 자원해제
CASE1. close() 메서드가 finally 구문이 아닌 곳에 위치
try {
자원을 생성
:
자원을 사용
:
자원.close(); ⇐ CASE1
} catch(예외 e) {
자원.close(); ⇐ CASE1
예외처리
} finally {
자원.close();
}
CASE2. 자원 생성 부분은 있으나 close() 메서드가 없는 경우
abc.jsp ---> abc_jsp.java ---> abc_jsp.class
<%! String name; %> ---------> 멤버변수
<% String name; %> ---------> _jspService() 메소드의 지역변수
'슈개's IT > SW개발보안' 카테고리의 다른 글
[SW개발보안] 개발보안 기타 정리 내역1 (0) | 2021.01.23 |
---|---|
[SW개발보안] SR1-10. 업로드·다운로드 파일 검증 (0) | 2021.01.23 |
[SW개발보안] SR1-7. HTTP 프로토콜 유효성 검증 (0) | 2021.01.23 |
[SW개발보안] SR1-6. 웹 기반 중요기능 수행 요청 유효성 검증 (0) | 2021.01.23 |
[SW개발보안] SR1-5. 웹 서비스 요청 및 결과 검증 (0) | 2021.01.23 |