티스토리 뷰
1. 일반적으로 권고되는 패스워드 정책
- 대/소문자, 숫자, 특수문자를 혼용하여 8 글자 이상의 패스워드를 사용하도록 한다.
- 동일 문자를 연속 4회이상 사용하지 못하도록 한다.
- 패스워드 히스토리를 관리해 2~3개 이상 동일 패스워드를 사용하지 못하도록 한다.
- 패스워드 변경 주기를 설정한다. ( 패스워드 유효기간을 90일 이하로 설정 )
- 연속적인 숫자/문자 조합 및 생일, 전화번호 등 추측하기 쉬운 패스워드 사용을 금지한다.
- 사전에 나오는 쉬운 단어나 이름은 패스워드로 사용하지 못하도록 한다.
- 기본 설정된 패스워드는 사용하지 못하도록 설정한다.
- 초기 부여된 패스워드는 사용자 최초 접속시 변경하도록 한다.
2. 패스워드 체크를 위한 시큐어 코딩 기법
권고되는 패스워드 정책 중에서 하나 이상의 알파벳, 숫자, 특수문자를 포함하는지 체크 / 최소 8글자 이상인지 체크
컨트롤러에서 비밀번호를 체크하기 위한 method를 수행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 |
@RequestMapping("/member/registry" )
public void registryMember(MemberRegistryVO memberVO, HttpServletResponse response) {
try {
// 회원가입시 비밀번호 체크하기
/*
* 하나 이상의 알파벳을 포함해야 함
* 하나 이상의 숫자를 포함해야 함
* 하나 이상의 특수문자를 포함해야 함
* 최소 8글자 이상 입력해야 함
*/
boolean isVerifyPassword = verify(memberVO.getUserPassword());
if( !isVerifyPassword ){
//password가 취약하다면 addMember를 하지 않고 취약하다는 것을 사용자에게 알려준다.
SendMessage.send(response, "-1");
return;
}
memberService.addMember(memberVO);
SendMessage.send(response, "OK");
}
catch(RuntimeException re) {
re.printStackTrace();
SendMessage.send(response, memberVO.getUserId() + "은(는) 이미 등록된 아이디 입니다.");
}
}
public boolean verify(String password) {
/* String alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int alphaCount = 0;
for (int i = 0; i <password.length(); i++){
if (alpha.indexOf( (password.charAt(i) + "")) != -1){
alphaCount ++;
}
}
String numbers = "0123456789";
int numberCount = 0;
for (int i = 0; i <password.length(); i++){
if (numbers.indexOf( (password.charAt(i) + "")) != -1){
numberCount ++;
}
}
String symbols = "!@#$%^&*()_+-=[]{}/<>?,.;':`~";
int symbolsCount = 0;
for (int i = 0; i <password.length(); i++){
if (symbols.indexOf( (password.charAt(i) + "")) != -1){
symbolsCount ++;
}
}
if ( alphaCount == 0 || symbolsCount == 0 || numberCount == 0 ){
return false;
}
return true;*/
String passwordPolicy = "((?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#$%^&*()-=+]).{8,})";
Pattern pattern = Pattern.compile(passwordPolicy);
Matcher matcher = pattern.matcher(password);
return matcher.matches();
} |
cs |
정규표현식을 사용하지 않으면 특수문자, 숫자, 알파벳이 각각 존재하는지 for문을 이용해 체크해야 한다.
'Secure Coding' 카테고리의 다른 글
안전하지 않은 예외처리 (2) | 2016.05.02 |
---|---|
파일 업로드/다운로드 취약점 (0) | 2016.05.02 |
크로스 사이트 요청 위조 [ CSRF ] (0) | 2016.04.29 |
크로스 사이트 스크립팅 [ XSS ] (0) | 2016.04.29 |
로그인 시도 횟수 제한 (0) | 2016.04.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- list
- sort
- boj
- onPostExecute
- 자바
- REDIRECT
- controller
- INSERT
- 예외처리
- DFS
- mybatis
- algorithm
- DP
- 이클립스
- 안드로이드 비콘
- Spring
- jsp
- java
- BFS
- AlertDialog.Builder
- Baekjoon Online Judege
- restfb
- servlet
- indexOf
- onBackPressed
- table
- maven
- 안드로이드 스튜디오
- RequestMapping
- order by
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함