운영
- 리뉴얼작업시
1. 리뉴얼작업시 사전조사 즉 히스토리를 파악하여라. -니자신을 믿지말어라.
- 기능점수
1. 기능점수는 고객입장에서 카테고리별로 엄선해야지된다. 그래야 고객사들이 이해가빠르고 지불을 흔쾌이한다.
- 고객지원
1. 비밀번호 잃어버렸다고 문의올?는 "비밀번호 변경은 초기화해서 이메일로 알려줘라" 절때 복호화처리하지말어라 운영자도 모른다는 전제를 깔고가야된다.
- 회의
1. 사용자가 의문 및 연관 상상을 할수있는 그런걸 아예 주지말어라 (화면 및 단서를 주지마) 이러한 상상의 나래를 펼치게되면 기존 설계근본이 흔들릴 수 있다.
2. 기존 원하는 기능 외의 회의하는 고객의 개인적 편의를 위한 기능등이 요구사항으로 나올수있다.
- 산출물
1. 시스템별 연계관련된 문서는 "도식화"하여서 매번 갱신해라
2. 이행보고서나 그런것들 작성시 키워드 불안하거나 뭐가 잘못된듯한? 뭔가 우리측에 문제있는듯한 , 뭔가 실수인듯한
단어는 넣지말어라 최대한 이완된 단어를 사용해라 최대한 잘못을들어내지않는 단어를사용해라
- 개인적..
1. 뭐든지 5번이상 검토해라 조사할때
2. 항상 내가지금 하고있는 일들(스케쥴관리) 달력에 체크
하고있는거 현재 스케쥴을 윗사람에게 관리자에게 알려라 그래야지 내가 놀고있지 않다는것을 알것이다.
달력에 그날한거 꼭적고 간단히(일일업무)
개발
- 유저관리
1. 사용자 "로그인,로그아웃" 내역 history를 남겨라 (DB의 로그테이블을 따로만들어놓아라)
예) ip,id,login구분,date, (mac구분되면 mac도)
2. 사용자 로그인시 5번이상 비밀번호 틀렸을때 계정을 막아라 Lock (막는 기능을 추가해라)
3. 비밀번호는12자이상 (영문,숫자,특수문자 포함) 이때 sql injection 등8대보안 체크해라
4. 분명 사용자별 권한이 존재하는 프로젝트가 있을것이다. 이때에는 사용자별 권한 관리를해라. (롤관리)
하나의 롤에 어떤어떤 페이지의 어떤기능이 가능한지. 설정하는 페이지가 따로있어야지 관리가편하다
5. 로그인처리시 보안로그인 단계를 1,2,3 단계를 만들어라
로그인시 보안단계3단계이상 구분두게하고(UI등)
쿠키로 쿠키값에 비밀번호를 넣는것이 아니다~!!!!! 아이디비밀번호 저장하기? 로그인정보 저장하기? 처리를 쿠키로하지말어라!
6. 사용자 인증처리가있는 프로젝트시 (인증할때 인증된 날짜. , 인증해준 사람 등의 history를남겨라) DB history테이블을두어라
7. 비밀번호 변경은 90일마다 한번씩 처리하는 기능추가하여라 ( 특수문자 숫자 문자 포함) 이때 sql injection 등8대보안 체크해라
8. 개인정보 변경시 비밀번호를 한번더 물어라.
9. 고객개인정보 수정창이나 고객정보들 불러오는 페이지에서는 고객정보 비밀번호라던지 평문으로 가져오게 하지말어라. 주민등록번호, 연락처 같은경우는 **** 처리
- 세션관리
1. 기술적으로 해당세션있을시에만 외부에서 사용가능한 "파일다운로드, 이미지"를 불러지도록하여라.
즉 해당권한을 가진세션만 이미지가 보여지도록 충분히 세션처리할수있다.(이미지 다운로드 외부 안되게)
2. 페이지별 접속 카운트를 남겨라 히스토리를 남겨라 (페이지별 카운트처리) ip,id,login구분,date, (mac구분되면 mac도)
3. 페이지별 권한관리를 체크하여 읽기,수정,삭제 등을 처리하여라.(가운데 권한별 모듈하나만들어서 처리해라)
4. 유저 동시접속 안되게처리, 이미 로그인되어있을경우 기존세션 날리고 접속시 안내메시지로 알려줘라. history남겨라 ip,id,login구분,date, (mac구분되면 mac도)
5. 유저정보는 절때 쿠키에 담지말어라 왠만하면 쿠키쓰지말어라
- 취약점,보안
1. 보안취약점 다막기 10대취약점
1-1. 입력값 검증 부재
웹 애플리케이션 서비스를 요청하기 위해 애플리케이션에 데이터를 전송할 때 HTTP를 통해 URL, 쿼리(Query), 헤더(Header), 쿠키(Cookie), HTML 폼에 대한 정보를 전송한다.
이때 이 데이터 값을 악의적으로 변경해 시스템에 피해를 가할 수 있다.
* 쿼리평문이나 화면단에서 그대로 넘어오는 변수값을 그대로 query에 쓰지말어라, HTTPS를 지향해라, 쿠키값을 그대로 쓰지말어라
1-2. 취약한 접근 통제
가장 심각한 위협은 외부에서 관리자의 접근을 허용하는 것으로 루트 권한이나, 시스템 환경 구성 관리 권한을 제공하면 이 통로를 통해 전 시스템에 대한 접근이 허용될 수 있다.
* 절때 어드민 페이지로 로그인하는 화면을 제공하지말어라 즉 무슨말이냐면 화면에 "관리자화면가기" 버튼이라던지. 그런것을 외부에 노출시키지말어라
한가지 좋은 방법으로는 특정URL를 운영자가 숙지후 그곳을 통해 접속하면 되는걸로 만들수 있다. 여기에서 한단계 더 나아가서 처음접속시 에러뜨고 4번정도 재접속시(URL호출)시
관리자 페이지를 접속하게 만든다던지..
1-3. 취약한 인증 및 세션 관리
인증 관련 정보를 제어하는 프로그램에 대한 통제는 상대적으로 느슨하다. 세션에 실려 다니는 정보가 유출돼 위협이 발생할 수도 있다.
* 쿠키쓰지말어라
1-4. 크로스 사이트 스크립팅
특정 사이트에서 사용자가 정보를 받을 때 그 정보 내에 악의적인 코드를 숨겨놓아 이를 클라이언트에서 실행되도록 하는 기법이다.
* 당연 크로스 사이트 스크립팅 필터 함수 하나만들어사 사용해라.
1-5. 버퍼 오버플로우
웹 서버, 웹 애플리케이션 서버에 대한 공격 유형이다. 웹 애플리케이션 자체의 버퍼 오버플로우에 대한 공격 유형과 비슷하다.
* 똑같은 IP로 지속적인 1분에 100번정도? 이상 접속요청이 있으면 그IP는 막아버려라.
1-6. 삽입 취약점
삽입 취약점은 웹 애플리케이션이 자체 로직을 이용해 외부의 모듈을 호출하는 것이다.
*(절때 파라미터값으로 서버의 특정경로를 호출하는 다운로드모듈을 만들면안된다)
1-7. 부적절한 에러처리
애플리케이션 실행 도중 에러가 발생한 경우에 해당 에러의 내용을 직접 사용자 화면에 보여주는 경우가 있다. 이 정보가 자바 익스프레션 덤프(Exception Dump)라면 사용자는 애플리케이션이 어떤 계층 구조로 이뤄져 있고 어디에서 어떤 문제가 발생하는지 알 수 있으며 이를 통해 시스템에 대한 공격을 할 수 있다.
* 사용자에게 500에러 404에러 라던지 에러 코드를 노출시키지말어라. 자체 오류코드를 만들어서 사용하던지..
1-8. 취약한 정보저장 방식
웹 애플리케이션이 데이터베이스나 파일 시스템이 민감한 정보를 저장할 필요가 있다. 이들 정보는 외부에서 접근이 허용되지 않는 내부 망에 저장되는 경우가 대부분이지만 웹 서버에 저장돼 외부 취약점이 발생하기도 한다.
* 파일업로드 모듈만들시. path이동 ../ 요딴것을 제거하고 사용자가올리는 파일명 그대로 저장하면안된다. 가운데 맵핑테이블을 두고 따로 관리하여라
* 파일다운로드 모듈시 맵핑테이블의 키값으로 값을받아 처리하여 받게하여라.
1-9. 서비스 방해공격
서비스 방해 공격은 웹 애플리케이션의 취약점을 이용해 해당 애플리케이션이 서비스 중단 상태로 가도록 하는 것이다.
1-10. 부적절한 환경 설정
서버 환경 설정에서 일반적으로 일어나는 유형은 운영 팀에서 적절한 보안 패치를 하지 않았을 때 발생한다.
2. 파라미터관리 "파라미터 검증을 뭐든지해라 문자, 실수, 인트 등 뭐든 것이 범위안에 맞는지 처리 리플레이스 할거 처리하고 "
3.(업무상 도출된) 주민번호라던지 리얼월드에서 사용하는 유일코드는 절때 쓰지말고 따로 하나의 맵핑테이블을 두어 처리해여한다.
- 디자인
1. 테마셋팅할수있는. 즉 css.. 처리로 유연하게하여라
2. 늘어나는 메뉴들은 DB의 내용으로 자동으로 늘어나도록 만들어라 (메뉴처리 권한 및 메뉴는 DB에 서 불러다가 채워넣을수있게.)
메뉴추가될?마다 그때마다 하드코딩을할것인가? 말도안된다.
3. 테두리가 있는 이미지버튼경우 즉 버튼의 유연한 크키조절을 위해 9path 처럼 css를 먹여서 사용하여라
4. 최대한 이미지파일을 사용하지말어라.css로 처리하여라
5. 화면에 사용자 아이디, 이름, 소속같은 간단한 로그인된 정보를 보여줘라. 고객도 내가지금 어떤 아이디로 접속했는지알수 있으며 원격지원으로 고객지원할때도 내가 보기도좋다.
- 모니터링, 관리자페이지
1. 관리자가 들어가서 처리할수있도록 관리자 페이지를만들어라 ui에 절때 관리자 페이지들어가는 메뉴는 보여선안된다.
어드민페이지 관리자 ...페이지.아주 파워풀. 유동적으로 처리할수있도록 만들어라
2. 업무별 트렌젝션을 처리할수있게 만들어라 (단계별 빽 하는거. 시스템사용자용 메뉴만들어놓기 (트렌젝션 앞뒤 처리 ) 가능한...)
어떤고객들은 실수로 A로 선택하고 처리해야되는데 B로 했어요 라면서 되돌려달라고하는경우가 많다. 이럴때 유용하게 만들어라.
- DB
1. 절대로 쿼리에delete라는 건없다! 지운 상태값과 지운날짜로 구분하여라
뭐든지 내역관리를 해야하니 삭제하더라도 진짜 삭제는 시켜선 안되고 그에따른 삭제 유무 즉 사용유무 필드를 두어 처리한다
2. 데이터는 뭐든 상태값을 가지고 그상태값으로 처리된다. 즉 유일한 유니크한 데이터는 없다는것이다. 언제든지 바뀌고 수정된다
3. 시스템 코드정보는 DB에서 관리를하는데 버전별로 관리를해라. 즉 지사코드라던지, 부서코드라던지 절때 안바뀔것같은 코드도 언젠간 바뀐다 !!!! 그러니 버전별 구분을 두어라.
4. 개인정보 암호화 처리하여 DB에 넣어야한다!!!!!(정부에서 지향하는 암호화기법을 사용해라)
5. 암호화된 데이터는 절때 키값으로 사용해선안된다 join쿼리라던지 암호화된데이터로 쿼리를 날리면 DB 겁나 ㅡㅡ돌아버린다 느려~ 그에 알맞는 시퀀스를 부여해라.
6. 절대로 업무적으로 쓰는 코드(부서코드값,사번)등 키로쓰지말어라 복합키라도.
7. 데이터는 맵핑테이블 하나 변경으로 인한 변경이 가능하도록 (ㅡㅡ너무많이하면 테이블늘어나니깐 알아서...정규화넘하면 역정규화를..해야된다)
다시말해 DB정규화 잘해라.
8. 쿼리 날릴때 유니온걸때
FROM ( SELECT 'KVT0402' AS SB_TYPE, A.* FROM (SELECT * FROM KVT0402) A
UNION ALL
SELECT 'KVT0403' AS SB_TYPE, B.* FROM (SELECT * FROM KVT0403) B
UNION ALL
SELECT 'KVT0404' AS SB_TYPE, C.* FROM (SELECT * FROM KVT0404) C)
이런식으로 구분쪽 sb_type 넣어라 디버깅할때 좋다^^
9. 기준으로 버전 있는 테이블두고 (그버전에 따라서 그냥 나오는 각각의 view 를 만들어서 사용해라 )
10. 데이터는 중복성을 절때 없에라
11. 데이터 연동시 한가지 방법으로만 해라. 왠만하면.. 너무많은방법론들은 관리가 힘들어진다.
12. 데이터의 성격은 이력성과 실시간반영형 이있다 이력성에는 데이터 중복성이 허용된다. 하지만 이력이러날때 그시점의 데이터라는걸 알고있어라
13. 테이블내용이 자주바꾸지않는 테이블은 캐쉬를사용해라. 시스템코드 테이블이라던지..
14. 지사변경등 사업소 변경이 일어날수있으니.....
기존 이력성데이터는 현재 기준으로 보여주고 옛날 기준으론 옛날 사업소 보이도록 .. 하는.. 그런
내역관리를....해야된다 어렵네-0-
15. 데이터의 사용요무를 체크할수있는 컬럼을둬라
16. 언제사용가능한 데이터인지 버전명(버전) 컬럼을둬라
17. 업데이트한 시간과 버전정보 시간과 델리트한 시간과 사용여부 시간을 넣어라!!!!!!!!!(컬럼을둬라)
- 데몬,스케쥴
1. 메일 또는 sms 보내는 내역 관리 내역 관리 테이블 적용 성공여부등.남겨라
메일SEND 포맷이라던지 서버ip등 프로퍼티는 DB,config에 넣어놓아라. select IP from ykt1106 where STAT = 'MAIL'
2. 실패한 스케쥴이나 트렉젝션이 실패한 것이있으면 나중에라도 돌아가서 처리되도록 관리를해서 싱크를 지속하게 맞춰야한다.
3. 스케쥴러같은거 돌다가 빠진거나 오류난건에대해서는 TO-DO 테이블에 넣어놓고 그걸 다시한번 실행할수있도록...해라.
- 시스템
1. https 및 post 및 get 암호화 파라미터
2. 왠만하면 get은 filter에서 모든지 팅겨나게처리하여 POST만 가지고 이뤄지게 만들어라.(뭐든 POST 방식으로 그나마..)
3. 서비스파일 아무나접근하게 만들면안됨
4. 마우스 오른쪽버튼 막아라
5. 속성보면 주소 알수없게해라 -_- 어쩔수없이 보이긴하겠지만 파라미터값으로 페이지호출 다르게할수있으니 충분히 가능하다
즉 사용자가보는 URL은 하나인것이다.
6. 게시판 페이징 처리할때 10개면 10개만rownum 10개만 가져오고 페이징 번호 가져와서 그때그때 그페이지당 뿌릴것만 페이징 번호 넘겨줌
7. cron으로라던지 시스템서버안에서 DB 및 소스 백업받는 쉘하나짜놓기, DB와 소스파일 백업받는거 다른디바이스에서도 받아놔야된다(중요)
8. 관리자페이지에 설정값 등 설정할수있는 화면있어야됨
7. 사용자 사용화면에 tip메시지 넣어라 업무절차 내용 및 안내메시지 꼭 화면에(항상 페이지 마다 도움말을 두어 업무를 설명하는 란을 적어준다 검색조건등 을적어준다)
8. 공지사항 등 입력시 팝업 처리 기간줄수있게 한다. 시간까지, 메일날릴건지, sms 날릴껀지.
9. 404등 500 오류등 모든오류는 그냥 바로 오류메시지 보여주지말고 오류메시지는 절때 친절하면안된다. 해킹에 요인이된다.
10. 항상 유저가 보고있는 url을 검사하고 (그 url에서 다음스탭 또는 백으로 스탭 들어갈수있는곳으로) 활로 체크해라.
11. 게시물 수정 및 글쓰기, 리플, 답글, 할때는 별도의 비밀번호를 관리해야한다 별도의 비밀번호 입력받는곳을 만들어라
12. 서버의 경로는 언제든지 바뀔수있으니깐. 프로젝트안에서 절대,시스템경로를 적을때 config파일만들어서 처리해라
13. 웹컨텍스트쪽안에 첨부파일경로 넣지말어라 "WEB-INF쪽에 넣던지" url로 접근하지못하도록.
14. 시간이 오래걸리는 작업경우 중복으로 돌아가지못하도록 전문번호를 받아서 지금 돌아가고있는지 없는지 확인하고
돌아가는중이면 사용자에게 지금돌아가고있으니 나중에 시도해주세요라고 알려준다.
전문같은경우나 작업단위 확실하게 동시 작업못들어오게
동일한 요청건에대하여 하나만 처리되도록-_- 타임아웃주고
동일한 요청키가 존재하여 해당 요청을 처리할 수 없습니다.잠시 후 다시 시도해 주십시오.
15. 실행취소를 위한 세션아이디!! 즉 실행취소전문도있어야함
16. 뭐든건 변수로 환경설정할수있어야한다 화면단에서
17. 화면에서 권한가진사람은 사용자 전환 가능하게 처리
18. 화면에 사용자가 요청시 기다리는 시간알림창에 wait 프로그레스바에 현 몇초 기다리고있는지 나오게 해줘라 4초 기다리는중.
19. 전문이나 그런것들은 포맷양식 전송 포맷은 xml이나 따로 환경파일로 빼고 클래스를 만들어서 트렌스폼을하던 해서 사용하게 해야한다!! 협업을위해
20. 휴일관리 페이지만들어라
21. 로그보는 화면 만들어라
22. 사용자 기본정보 초기화 기능만들어라.
23. 롤셋팅, 작업별 롤셋팅 할수있는 관리페이지만들어라
24. 버튼종류및 가져다쓸수있도록 치환할수있도록 만들어라
25. 배치 프로세스 리스트나오게만들어라, 수동실행 할수있는 기능도 만들어라 언제 돌았는지 확인컬럼도 두어라, 성공했는지 실패했는지컬럼도, 언제 도는지도..
26. 메뉴관리할수있는거 만들어라
27. 사용자별 로그 확인할수있는거 만들어라.
28. 하나하나 업무 흐름 즉테이블 연결흐름을 UI로 표현 그거자체를 엔진으로 만들고 그걸 가지고 유지보수할수있도록 관리페이지를 만들어놓으면 좋을것같다.
29. 스케줄러관리 만들때 몇시간동안 몇분에 시작하게 만들고 중복되는 스케쥴은 하지말아야하며(중복실행 방지)
30. 스케줄 배치 수동으로 돌릴때 즉 배치 돌릴때 사용자가 파라미터 넣을수 있도록 처리하여 유동적으로 처리하도록 만들어라.
31. 시스템날짜가 변경될수도있다 마냑 DB서버의 시간을 가져다쓰던지, WAS의 시간을 가져다쓰던지, 시간전용 서버를 가져다쓰던지. 한곳에 시간time을 가져다 사용해라
32. 프로그래밍쪽에서 seq생성시 syncronz 걸어놓고! 그 해당된 메서드만 불러써라.
33. 고객응대에대한 조치법을 취합하는 시스템을 만들어서 내가 처리한 조치법이라던지 이런걸 적어놓으면 다른 사람들도 등록해놓으면 그거를 참고해서 처리하면된다!
한마디로 모니터링시스템 을 하나 만들어놓고 고객응대를해야지.. 윤택하다. 고객정보라던지. 고객연락처 심지어 위치까지. 그리고 언제 전화받았으며 어떻게 문의했으며 성격까지
34. Ajax 어싱크같은 request때 요청ID(전문번호)하면 응답받을때 그요청ID에 대한 응답이라는 정보를 같이던져줘라 같은 Ajax 어싱크같은게 호출되면 어떤문에대한 응답인지 모를수있다.
35. 중요한 요청기능경우 고객이 버튼클릭시 컴펌으로Y,N 맞는지 다시한번 물어보아라. 또한 한번요청 들어갔을때 또한번 요청버튼누르도록 처리하면안된다.
즉 다시말해 사용자가 엔터로 요청버튼을 누를경우 중복된 요청이 들어갈수있다. 그에따른 프로그램이 꼬일수 있으니 안쪽에서 체크하던지 화면에서 아에 중복호출되지 않도록 모달 프로그레스바를 뛰어라.
* 무조건 요청들어가면 모달로된 alert(layer) 안내메시지 뛰어줘라 프로그래스바 보이고!
* 삭제또는 업데이트 작업일경우는 항상 사용자에게 컴펌 메시지로 확답을 받아라..!!!!!!! 화면에서
36. 데이터를 연동할때 연동시 query등을 DB에넣어라 파일로 빼지말어라
37. 사용자로그인시 초기화면, 즐겨찾는 페이지등을 선택할수있는 기능을 만들어줘라
38. 절때 소스상에는 ip가 들어가선안된다.
39. 은행처럼 세션 타임아웃시간 화면에 보여줘라 그리고 몇초후에 세션끝난다고 체크해서 보여줘라 사용자에게 그리고 끊키면 로그아웃후 초기화면으로 forword
40. 연동할데이터가 있는 화면이면 데이터연동버튼을두어 수동으로도 사용자가 데이터 연동할수있도록 버튼을 두어라
41. 페이지별로 사용자들을 위한 도움말버튼이 있어 도움말을 제공하고 , 그도움말을 관리페이지도 있어야겠다 (하드코등하지말란말여)
- 시스템 구조
1. 중앙집중적으로 처리를 하더라도 가운데 매니저 즉 하나의 서버를 두고 게더링을 해라 온라인이든 배치든
IO 문제,네트워크 등 관리등.. 문제가 많으니..
2. 클라이언트에서 항상 서버에 접속하여 마이그레이션받을것이 있는지 확인하고 마이그레이션받을게 있으면 서버로부터
받아서 마이그레이션작업을 실시한다. 예를들어 sql문을 받아서 sql문을 돌린다던지. 즉 서버의 주관하에 있어야된다.
3. 매일 서버 재부팅하도록만드는것도 좋다. ㅡㅡ조금 위험(큰곳에선 사용못하겠다.)
4. 버전관리는 정말 잘되어야한다 하나의 통합된 솔루션이면 고객별 처리는 환경설정파일로 처리를. if구분해도되지만..
5. 사용자가 일으키는 이벤트는 하나로 모드(개발쪽 반영 모드인지 오리지널 운영인지) 에따라서
리얼쪽에서 개발쪽에 반영같이 들어감 인터페이스같은?개념이랄까/ 훔-_- 하나의 인터페이스로
로직구현부분을.. 그러면 개발과 테스트가 동시에 ..
6. 웹서버가 한대고 그뒤에 서포트하는게 여러게면 이쪽부분을 서버로두고 여러개의 서포트하는 프로세스가 붙칠수있게(클라)
7. 여유되면 이미지 서버 따로두기, 파일 서버 따로두기, 데이터 서버 따로두기, DB 서버 따로두기, 통신 서버 따로두기, 처리해여라.
|