질문/조언팁/리소스 공유

https://xetown.com/topics/1591321

 

위 글을 보고 도움이 될 것 같아 만들었습니다

 

1.PNG

 

기본적으로 회원가입 폼을 보면 위와같이 비밀번호 조건문이 있습니다.

 

 

2.PNG

 

먼저 비밀번호를 입력하면 사이트의 비밀번호 조건을 만족하였는지 체크합니다.

 

위 조건에서는 6자리 이상이며 영어와 숫자를 포함하고 있는지 체크하여 만족하지 못했을 경우  '비밀번호를 확인해주세요.' 메세지를 추가합니다.

 

 

 

 

 

 

 

 

 

(이해를 돕기위해 비밀번호가 가려지지 않게 하였습니다.)

 

다음으로 비밀번호 조건을 만족하였을 경우 비밀번호를 sha1로 암호화하여 https를 통해 외부서버에서 비밀번호 유출 전적을 확인하게 됩니다.

 

'test123'과 같이 유출된 비밀번호를 입력하면 '검사중..' 메세지로 변환되었다가 유출되었다는 메세지로 변화하게 됩니다.

 

 

 

 

 

 

 

만약 유출되지 않은 비밀번호를 입력하였다면 '이 비밀번호는 안전합니다. (xx자)' 라는 메세지로 교체되며 유출되지 않은 비밀번호라고 나오게 됩니다.

 

 

파일: password_vulnerablilty_check.zip (07/13 업데이트 됨)

설치 위치: /addons/password_vulnerablilty_check

깃허브: https://github.com/Waterticket/xe-addon-password_vulnerablilty_check

 

설치 후 애드온 설정에서 활성화 해주세요.

 

 

https://haveibeenpwned.com/Passwords 에 올라와있는 데이터셋을 기반으로 제작하였으며, 데이터 양이 많아 실시간으로 추가하고 있습니다.

 

프로젝트: https://passwordcheck.hotoproject.com/

 

+) 데이터베이스 크기가 수십기가를 넘어서서 집에서 직접 데이터베이스 서버를 운영하고 있습니다.

잦은 쿼리는 지양해주세요 ㅜㅜ

 

haveibeenpwned 에서 제공하는 API를 사용하도록 패치하였습니다.

패치 도와주신 @YJSoft 님께 감사인사 드립니다 :)

글쓴이 리버스

profile
모듈 제작하는 현역 故3 리버스입니다!

== 판매중인 모듈 ==
미션] https://xetown.com/thirdparties/1511787
길드] https://xetown.com/thirdparties/1387146
게시판] https://xetown.com/thirdparties/1481847
  • profile
    오호 아주 유용하겠네요! 자료공유 감사드려요 ^____^
  • profile
    유용한 자료이네요~ 감사합니다.
  • profile

    비밀번호를 리버스님사이트에 평문으로 들어가면 안되지요.

    그 세션기록이나 그런 부분이 다 세션에 암호화되지 않고 요청되는거 아닌가요?

     

     

    var password_enc = CryptoJS.SHA1(e.target.value).toString();

     

    아 한번 인코딩 하는군요.

     

    근데 저렇게 하시지 마시고, 차라리 개인 서버 요청하도록 모듈화시키는게 더 낫습니다.

     

    어딘가에 또다시 비밀번호 암호화문이던 서버세션에 날리는 것보단 내부에서 해당 클라이언트서버와 통신하는게 더 낫지요..ㅠ

     

  • profile profile

    저도 그 부분때문에 고려를 많이 했는데요

    일단 어젯밤부터 계속 db에 데이터를 넣고 있는데 3일정도 걸려야 데이터가 전부 들어갈거 같습니다..

    그냥 무턱대고 집어넣는거라 오래걸리기는 할텐데 6억줄 가까이 되다보니 어떻게 처리를 하던 기본적인 양 자체가...

    다른거 없이 해시값 초반 다섯글자만 있는 인덱스 하나 넣어놨는데 전체 예측 용량도 60GB 정도 돼서 아마 어지간한 개인 서버에서 돌리기는 어렵지 않을까 합니다 ㅠㅠ

     

    그렇다고 이 거대한 데이터를 다시 공유하기는 사실상 어렵고, 그냥 사이트에서 데이터를 받아서 직접 구축하시는게 그나마 괜찮은 방법이 되겠네요 

     

    +) 18년 맥미니 최고사양 + 외장 nvme라 서버 성능이 딸리지는 않는데도 삽입속도가..

     

    +) 딱 해시값과 유출횟수만 들어간 기본 파일 용량만 25GB입니다

    D0885598-7C8B-4D9D-A619-C37581182E9E.png

     

    이걸 어떻게 모듈화 시켜서 공유할수는 없었다는점 양해 부탁드립니다.. ㅠ

  • profile profile
    디비에 10~20기가짜리를 다 넣을 필요가 없지요.

    저 부분을 그냥 json이나 모듈화 시키는 방법은 없나요?

    제가 저 파일들의 구조가 어떻게 되어있는지 잘 모르겟지만 해당 파일의 데이터를 잘 조합하는 방법으로 PHP처리한다면 쉽게 처리가 가능하지 않을까 싶어서요.

    아니면 차라리 저 사이트로 직접 요청 보내는 방법을 사용하는편이 더 나을지도 모르고요.
  • profile profile

    01D75291-7248-4389-BE66-4083E478A67B.png

     

    SHA1(40 byte):유출횟수(int) 형식입니다.

     

    한줄에 하나씩 들어가 있고요

     

    어떤식으로 모듈화를 시키면 될지 알려주시면 가능한지 체크해보겠습니다 

  • profile
    https://haveibeenpwned.com/API/v3

    API를 사용하는 쪽으로 구현은 어렵나요?
  • profile profile
    API도 확인해보았으나 어째선지 sha 앞글자 쿼리가 안먹더라고요

    그냥 앞글자와 관계없이 limit 건것과 같이 순서대로 출력이 됩니다

    연구해보다가 안돼서 개인 서버를 사용하게 되었네요
  • profile profile
    api으로 굳이 자바스크립트에 국한하여 할 필요 없을 것 같습니다.

    php파일으로 외부 요청 하는 방식으로도 충분히 ajax요청으로 애드온에서 작동이 가능하거든요.

    그 쪽으로 한 번 알아보세요
  • profile profile
    https://github.com/YJSoft/xe-addon-password_vulnerablilty_check/commit/65d4ba321193f709475468ac78104207624f724e

    일단 제 테스트 결과 정상 동작했습니다.
  • profile profile
    merge 했습니다

    쿼리할때 앞 다섯자리가 빠지는줄 모르고 결과가 이상하게 나오는줄 알았네요 ^^;
  • profile
    위에서 YJ님이 수정해주신 것처럼 haveibeenpwned API를 직접 사용하는 편이 공신력과 신뢰도 면에서도 좀더 낫고, 리버스님 서버 운영 부담도 덜 수 있을 것 같습니다.

    이 애드온을 사용하실 분은 개인정보 제3자 제공 등의 법적인 부분도 고려를 하셔야겠습니다. sha1으로 암호화했더라도 비번은 비번이고, sha1이 그다지 강력한 암호화 방식도 아니고, 보안성 체크 명목으로 제3자에게 전송된다는 점은 피할 수 없으니까요.
  • profile profile
    API를 사용한다면(즉 위 패치 적용시) 서버로는 SHA1중 맨 첫 5자리만 보내집니다. 나머지는 클라이언트에서 비교가 이루어집니다.
  • profile profile
    첫 5자리라면 훨씬 낫네요.
  • ?
    자료 공유 감사드립니다.