CodeIgniter에 대한 인증 라이브러리를 어떻게 선택해야합니까? [닫은]


398

나는 몇 가지 가 참조하십시오 . 어느 것이 유지 관리되고 사용하기 쉬운가? 그들의 장단점은 무엇입니까?


8
여전히 관심이 있다면 Tank Auth를보십시오. 리뷰를 작성한 후 아래 게시물을 업데이트했는데 훌륭합니다.
Jens Roland

7
업데이트 해 주셔서 감사합니다! 앞으로이 질문에 대한 방문자에게 유용한 정보가되므로 허용되는 답변을 변경했습니다.
GavinR

3
왜 갑자기 가까이? 여섯 가지 주관적인 질문 지침에 잘 맞는 것 같습니다.
Brian Ortiz

3
재개 후보로 지명되었습니다. 내가 가진 질문 (CI의 어떤 인증 시스템이 가치가 있는지)에 완벽하게 대답했습니다.
Cruachan

3
@BrianOrtiz 및 Cruachan과 동의 : 왜 가까이? 좋은 질문과 좋은 답변.
피터 K.

답변:


465

업데이트 (2010 년 5 월 14 일) :

러시아 개발자 Ilya Konyukhov는이 글을 읽은 후 건틀릿을 집어 들고 아래 권장 사항과 요구 사항에 따라 DX Auth 기반 CI에 대한 새로운 인증 라이브러리를 만들었습니다.

결과적으로 탱크 인증 은 OP의 질문에 대한 답변처럼 보입니다. 여기서 사지로 나가서 현재 사용할 수있는 CodeIgniter를위한 최고의 인증 라이브러리 인 Tank Auth를 호출합니다. 그것은 당신이 필요로하는 모든 기능을 가지고 있고 당신이하지 않는 팽창을 가지고있는 견고한 라이브러리입니다 :

탱크 인증

찬성

  • 모든 기능
  • 기능 세트를 고려한 마른 공간 (20 개 파일)
  • 아주 좋은 문서
  • 간단하고 우아한 데이터베이스 디자인 (단 4 개의 DB 테이블)
  • 대부분의 기능은 선택 사항이며 쉽게 구성 할 수 있습니다
  • 언어 파일 지원
  • reCAPTCHA 지원
  • CI 검증 시스템에 연결
  • 활성화 이메일
  • 이메일, 사용자 이름 또는 둘 다로 로그인 (구성 가능)
  • 비활성화 된 계정 자동 만료
  • 간단하면서도 효과적인 오류 처리
  • 해싱에 phpass를 사용합니다 (또한 DB의 자동 로그인 코드를 해시합니다)
  • 보안 질문을 사용하지 않습니다
  • 사용자와 프로필 데이터의 분리는 매우 좋습니다
  • 로그인 시도 실패에 대한 매우 합리적인 보안 모델 (봇 및 DoS 공격에 대한 우수한 보호)

(부) 단점

  • 분실 한 비밀번호 코드는 DB에서 해시되지 않습니다
  • (Google 소유의) reCAPTCHA 서비스에 의존하고 싶지 않은 사람들에게는 좋은 기본 (가난한) 보안 문자를 포함하지만 실제로는 충분히 안전하지 않습니다.
  • 매우 드문 온라인 문서 (코드가 잘 문서화되고 직관적이므로 사소한 문제)

탱크 인증을 여기에서 다운로드하십시오


원래 답변 :

나 자신도 구현했습니다 (현재 몇 주 동안 일한 후 약 80 % 완료). 나는 다른 모든 것을 먼저 시도했다. FreakAuth Light, DX Auth, Redux, SimpleLogin, SimpleLoginSecure, pc_user, Fresh Powered 및 기타 몇 가지. 그들 중 누구도 기본 기능이 부족하거나 본질적으로 안전하지 않거나 내 취향에 너무 부풀어 오르지 않았습니다.

실제로 CodeIgniter에 대한 모든 인증 라이브러리를 테스트 할 때 (새해 직후) 세부적으로 정리했습니다. FWIW, 나는 그것을 당신과 공유 할 것입니다 :

DX 인증

찬성

  • 매우 완전한 기능
  • 중간 크기 (25 개 이상의 파일)이지만 상당히 슬림하게 느껴집니다.
  • 일부는 약간 깨진 영어이지만 훌륭한 문서
  • 언어 파일 지원
  • reCAPTCHA 지원
  • CI 검증 시스템에 연결
  • 활성화 이메일
  • 비활성화 된 계정 자동 만료
  • grc.com에 소금 제안 (PRNG에 나쁘지 않음)
  • 저장된 '이유'문자열로 금지
  • 간단하면서도 효과적인 오류 처리

단점

  • 재 활성화시 새 비밀번호를 선택하지 않고 사용자가 분실 한 비밀번호를 '재설정'할 수만 있습니다.
  • 사제 의사 이벤트 모델-좋은 의도, 그러나 마크를 그리워
  • 사용자 테이블에있는 두 개의 비밀번호 필드 (잘못된 스타일)
  • 두 개의 개별 사용자 테이블을 사용합니다 (하나는 '임시'사용자를 위해-모호하고 중복 됨)
  • 잠재적으로 안전하지 않은 MD5 해싱 사용
  • 실패한 로그인 시도는 사용자 이름이 아닌 IP로만 저장됩니다-안전하지 않습니다!
  • 데이터베이스에 자동 로그인 키가 해시되지 않음-암호를 일반 텍스트로 저장하는 것만 큼 안전하지 않습니다!
  • 역할 시스템은 완전한 엉망입니다. 하드 코딩 된 역할 이름을 가진 is_admin 함수, is_role 완전한 엉망, check_uri_permissions는 엉망입니다. 전체 권한 테이블은 잘못된 생각입니다 (URI는 페이지를 보호하지 않고 렌더링 할 수 있으며 권한은 항상 정확하게 저장되어야합니다) 민감한 논리). 계약 위반!
  • 기본 (가난한) 보안 문자 포함
  • reCAPTCHA 함수 인터페이스가 지저분하다

FreakAuth 라이트

찬성

  • 매우 완전한 기능
  • 대부분 잘 문서화 된 코드
  • 사용자와 프로필 데이터의 분리는 좋은 터치입니다
  • CI 검증 시스템에 연결
  • 활성화 이메일
  • 언어 파일 지원
  • 적극적으로 개발

단점

  • 약간 부풀어 오른 느낌 (50+ 파일)
  • 그러나 자동 쿠키 로그인 (!)이 부족합니다.
  • 사용자 이름과 이메일로 로그인을 지원하지 않습니다
  • UTF-8 문자에 문제가있는 것 같습니다
  • 많은 자동 로딩이 필요합니다 (성능 저하).
  • 잘못 관리 된 구성 파일
  • 뷰에 많은 프로그램 로직이 있고 컨트롤러에 하드 코딩 된 출력으로 끔찍한 뷰 컨트롤러 분리. 계약 위반!
  • 포함 된보기의 HTML 코드가 잘못되었습니다.
  • 비표준 보안 문자 포함
  • 주석 처리 된 디버그가 모든 곳에서 울림
  • 특정 폴더 구조를 강제합니다
  • 특정 Ajax 라이브러리를 강제 실행합니다 (전환 할 수 있지만 처음에는 없어야 함)
  • 로그인 시도에 대한 최대 제한 없음-매우 안전하지 않습니다! 계약 위반!
  • 도용 양식 확인
  • 잠재적으로 안전하지 않은 MD5 해싱 사용

pc_user

찬성

  • 작은 설치 공간을위한 우수한 기능 세트
  • 가볍고 팽만감 없음 (3 개 파일)
  • 우아한 자동 쿠키 로그인
  • 선택적 테스트 구현 제공 (좋은 터치)

단점

  • 이전 CI 데이터베이스 구문을 사용합니다 (안전하지 않음).
  • CI의 유효성 검사 시스템에 연결되지 않습니다
  • 직관적이지 않은 상태 (역할) 시스템 (인덱스 거꾸로-실용적이지 않음)
  • 잠재적으로 안전하지 않은 sha1 해싱 사용

신선한 전원

찬성

  • 작은 설치 공간 (6 개 파일)

단점

  • 필수 기능이 부족합니다. 계약 위반!
  • 모든 것이 하드 코딩되었습니다. 계약 위반!

Redux / 이온 인증

CodeIgniter 위키 에 따르면 Redux는 중단되었지만 이온 인증 포크는 강력하게 진행되고 있습니다 : https://github.com/benedmunds/CodeIgniter-Ion-Auth

Ion Auth는 지나치게 무겁거나 고급 기능이없는 훌륭한 기능을 갖춘 라이브러리입니다. 대부분의 경우 해당 기능 세트는 프로젝트 요구 사항을 충족시킵니다.

찬성

  • 가볍고 간단한 CodeIgniter와 통합
  • 라이브러리에서 직접 이메일 전송 지원
  • 잘 문서화 된 온라인 및 활발한 개발자 / 사용자 커뮤니티
  • 프로젝트에 간단하게 구현

단점

  • 다른 것보다 더 복잡한 DB 스키마
  • 일부 영역에서 문서에 세부 사항이 부족함

SimpleLoginSecure

찬성

  • 작은 설치 공간 (4 개 파일)
  • 최소한의 부풀음 없음
  • 해싱을 위해 phpass 사용 (우수)

단점

  • 로그인, 로그 아웃, 생성 및 삭제 만
  • 필수 기능이 부족합니다. 계약 위반!
  • 도서관보다 출발점이 더 많다

내가 틀리지 말아라 : 나는 위의 라이브러리를 무시한다는 의미는 아니다. 나는 그들의 개발자들이 성취 한 것과 그들이 얼마나 멀리 왔는지를 매우 감명 받았으며, 내 자신의 코드를 재사용하기 위해 그들의 코드 중 일부를 재사용하지는 않았다. 내가 말하는 것은 때로는 이러한 프로젝트에서 초점이 필수 '필요한 것'(예 : 어려운 보안 관행)에서 더 부드러운 '좋은 행동'으로 바뀐다는 것입니다. .

따라서 기본 사항으로 돌아갑니다.

CodeIgniter의 완료에 대한 인증 못했습니다

인증 라이브러리의 최소 필수 기능 목록은 다음과 같습니다. 또한 내 라이브러리 기능 목록의 하위 집합이됩니다.)

  1. 선택적 테스트 구현을 통한 작은 설치 공간
  2. 전체 문서
  3. 자동 로딩이 필요하지 않습니다. 성능을 위해 라이브러리를 적시에 로딩
  4. 언어 파일 지원; 하드 코딩 된 문자열 없음
  5. reCAPTCHA는 지원하지만 옵션
  6. 권장되는 TRUE 랜덤 솔트 생성 (예 : random.org 또는 random.irb.hr 사용)
  7. 타사 로그인 (OpenID, Facebook Connect, Google 계정 등)을 지원하는 선택적 애드온
  8. 사용자 이름 또는 이메일을 사용하여 로그인
  9. 사용자 및 프로필 데이터 분리
  10. 활성화 및 비밀번호 분실을위한 이메일
  11. 자동 쿠키 로그인 기능
  12. 해싱을위한 설정 가능한 phpass (물론 소금에 절인!)
  13. 비밀번호 해싱
  14. 자동 로그인 코드 해싱
  15. 잊어 버린 암호 코드 해싱
  16. CI 검증 시스템에 연결
  17. 보안 질문이 없습니다!
  18. 클라이언트 측 (자바 스크립트) 검사기 (옵션)를 사용하여 강력한 비밀번호 정책 서버 측을 시행합니다.
  19. 사전 및 DoS 공격에 대한 BEST PRACTICES 대책으로 로그인 실패 횟수를 최대로 강화했습니다 !
  20. 준비된 (바운드) 명령문을 통해 모든 데이터베이스 액세스!

참고 : 그 마지막 몇 가지 포인트가 없습니다 당신이 당신의 웹 응용 프로그램이 필요하지 않습니다 과잉 것을 슈퍼 높은 보안을 제공합니다. 인증 라이브러리가 이러한 보안 표준을 100 % 충족하지 않으면 IT를 사용하지 마십시오!

소프트웨어에서 제외시킨 무책임한 코더의 최근 주요 사례 : # 17은 대통령 선거 기간 동안 Sarah Palin의 AOL 이메일이 해킹 된 방식입니다. 브리트니 스피어스, 버락 오바마, 폭스 뉴스 등의 트위터 계정이 해킹 당했을 때 최근 # 18과 # 19의 조합이 범인이었습니다. 그리고 20 위는 중국 해커들이 2008 년 한 번의 자동 해킹으로 70.000 개 이상의 한국 웹 사이트에서 9 백만 개의 개인 정보를 훔친 방법입니다.

이러한 공격은 뇌 수술이 아닙니다. 뒷문을 활짝 열어 둔 채로두면 앞면을 볼트로 조여서 안전을 허위로 느끼지 않아야합니다. 또한 CodeIgniter와 같은 모범 사례 프레임 워크를 선택하기 위해 코딩에 대해 충분히 진지한 경우 최소한 가장 기본적인 보안 조치를 올바르게 수행해야합니다.


<랜트>

기본적으로 다음과 같습니다 . 인증 라이브러리가 많은 기능, 고급 역할 관리, PHP4 호환성, 예쁜 CAPTCHA 글꼴, 국가 테이블, 완전한 관리자 패널, 종소리 및 휘파람을 제공하는지 여부는 중요 하지 않습니다. 모범 사례를 따르지 않아 내 사이트의 보안 수준이 떨어 집니다. 그것은의 인증 패키지; 한 가지만 수행해야합니다. 인증. 그것이 어떻게 실패 할 경우 , 실제로 좋은보다는 해를 더하고있어.

</ rant>

/ Jens Roland


1
나는 아직도 그것에 있고, 불쾌한 아키텍처 문제에 부딪 쳤고 빠른 해결 방법을 함께 해킹하는 것 (잘 작동하지만 타이트한 커플 링으로 고통 받음)을 선택하거나 앉아서 올바른 방법에 대해 열심히 생각해야 했습니다 . 나는 후자의 옵션을 선택했지만 여전히 깨지지 않았습니다 : D
Jens Roland

2
Jens, 당신은 당신의 (우수한) 게시물에 대한 응답으로 만들어진 것처럼 보이는 Tank Auth를보고 싶을 것입니다 : codeigniter.com/forums/viewthread/110993
Richard M

8
이 게시물을 업데이트하고 Ion-Auth (dx-auth에서 파생) 와 비교할 수 있습니까 ? 이 시점에서 이온 인증이 최신 상태이고 탱크 인증보다 활성화 된 것 같습니다. 탱크 인증만큼 좋은지 보안 관점에서 알고 싶습니다. 유용한 추가 기능이 있기 때문입니다.
Vijay

1
이 모든 라이브러리는 mysql을 사용하지만 noSql 데이터베이스 인 MongoDb를 사용합니다. MoongoDB와 호환되는 라이브러리가 있습니까? MySql 대신 MongoDB에 삽입하기 위해 위의 라이브러리 중 하나를 변환하려고 시도했지만 너무 복잡 해져서 이미이를 수행하는 라이브러리를 알고 싶습니다
Ninja

2
@Lykos : 물론-사용자 데이터는 UserID, UserName, Email, PasswordHash, LastLoginTime 등과 같은 인증 별 데이터입니다. 프로파일 데이터는 별도의 DB 테이블에 저장해야하며 특정 응용 프로그램에 따라 무엇이든 될 수 있습니다. 여기에는 생일, 성별, 고향, 평판 점수 등이 포함될 수 있습니다. 이런 방식으로 응용 프로그램 개발자는 인증 시스템이 갑자기 중단 될 염려없이 원하는 방식으로 ProfileData 테이블을 수정할 수 있습니다.
Jens Roland

58

Jens Roland의 "포괄적 인 목록"에는 사용자 역할이 포함되어 있지 않습니다. 다른 사용자 역할 (예 : admin / user 또는 admin / editor / user)을 지정하려면 다음 라이브러리를 사용하십시오.

  • Ion_Auth (리덕스 재 작성)
  • 리덕스
  • 백엔드 프로

Tank_Auth (위의 Jens 목록에서 1 위)에는 사용자 역할이 없습니다. 인증의 일부가 아니라는 것을 알고 있습니다.

  • 인증 및 역할 관리는 모두 페이지로드시 처리됩니다.
  • 둘 다 보안 관련
  • 동일한 테이블 / 모델을 둘 다 사용할 수 있습니다.
  • 둘 다 컨트롤러 생성자 (또는 자동로드)에로드되도록 설정할 수 있습니다.

필요한 경우 하나의 라이브러리를 사용하여 두 라이브러리를 모두 처리하는 것이 좋습니다. 이 때문에 Tank_Auth에서 Ion_Auth로 전환하고 있습니다.


아, 알다시피, 그것은 정말 좋은 일입니다-하나의 라이브러리에 모든 측면을 가지고 있으면서 간단하고 기능적으로 유지하십시오. 그런 이유로 Ion_Auth를 조사해야합니다! 고마워 버튼!
Edd Twilbeck

4
물론 이것은 좋은 지적이며 역할 관리 (일반적으로 권한 부여)는 인증 시스템과 밀접한 관련이있는 많은 사이트의 핵심 부분입니다. 여전히 고급 역할 관리 기능이 내장 된 취약한 인증 시스템보다 단순하거나 존재하지 않는 역할 관리 기능이있는 보안 인증 시스템을 선택하겠습니다.
Jens Roland 2016 년

Ion_Auth는 CI 2.1, 및 DataMapper ORM와 함께 잘 작동
user482594

37

Ion_auth! 매우 유망하고 작은 발자국으로 보입니다! 나는 ..

http://github.com/benedmunds/CodeIgniter-Ion-Auth


Ion Auth는 나에게도 잘 작동하며 필요한 모든 것과 내가 가지고 있지 않은 것은 없습니다 (비밀 질문과 같은 것).
SolidSmile 2016 년

1
Ion Auth는 사용량, 기능 및 경량 성 측면에서 현재 리더처럼 보입니다.
pbreitenbach

5
Tank Auth와 Ion Auth를 모두 시도했으며 Tank Auth 코드가 Ion Auth보다 훨씬 더 깨끗하고 이해하기 쉽고 확장하기 쉽다고 말할 수 있습니다. 다른 한편으로 Ion Auth는 '역할'을 지원합니다.
Jonathan

30

저는 Redux Auth의 개발자이며 언급 한 문제 중 일부는 버전 2 베타에서 수정되었습니다. 샘플 응용 프로그램으로 오프 사이트 웹 사이트에서이 파일을 다운로드 할 수도 있습니다.

  • 자동 로딩 필요 (성능 저하)
  • 본질적으로 안전하지 않은 '보안 질문'개념을 사용합니다. 계약 위반!

보안 질문은 이제 사용되지 않고 더 잊혀진 암호 시스템이 마련되었습니다.

  • 반환 유형은 true, false, error 및 success 코드로 구성됩니다.

이것은 버전 2에서 수정되었으며 부울 값을 반환합니다. 나는 너만큼 호지 포지를 싫어했다.

  • CI의 유효성 검사 시스템에 연결되지 않습니다

샘플 응용 프로그램은 CI의 유효성 검사 시스템을 사용합니다.

  • 사용자가 '잃어버린 암호'코드를 다시 보낼 수 없습니다

진행중인 작업

전자 메일보기와 같은 다른 기능도 구현했습니다. 그러면 전자 메일에서 CodeIgniter 도우미를 사용할 수 있습니다.

아직 진행중인 작업이므로 더 제안이 있으시면 계속 해주세요.

-팝콘

Ps : Redux를 추천 해 주셔서 감사합니다.


1
오 안녕 Mathew-내 게시물에 답변을 주셔서 감사합니다. 베타 버전은 매우 흥미롭게 들린다. Redux는 이미 내 라운드에서 가장 잘 다가 왔기 때문에 지금 바로 살펴볼 것이다.
Jens Roland

CI 포럼 스레드와 로드맵을 간단히 살펴 보았습니다. '동적'소금과 관련하여 잘 보이게 연결 (등록 날짜)을 권장합니다. (구성 파일 해시 키). (코드 또는 비밀번호) 레인보우 테이블을 막고 도난당한 데이터베이스에 대한 무차별 대입
Jens Roland

또한 인증 모범 사례 ( stackoverflow.com/questions/549/… ) 및 봇넷 조절 ( stackoverflow.com/questions/479233/… ) 에 대해 몇 가지 생각을 가지고 있습니다.
Jens Roland

14

Flexi Auth ( http://haseydesign.com/flexi-auth/ )를 보았습니다 . 매우 유망 해 보이며 사용하기 시작했습니다. 멋진 기능이 있습니다. CI와 완전히 통합되며 두 개의 서로 다른 라이브러리 파일이 함께 제공됩니다. 하나는 모든 기능이 매우 많이로드되고 다른 하나는 유효성 검사 만 포함합니다.

가장 좋은 방법 중 하나는 새로 등록한 회원이 이메일에서 링크를 클릭하고 활성화 할 때까지 사이트에서 일정 시간 동안 임시 액세스 할 수 있다는 것입니다.


이 링크에 감사드립니다. 또한 Flexi Cart haseydesign.com/flexi-cart의 또 다른 좋은 기능이 있습니다 .
Vir

13

아마도 당신은 당신의 요구에 맞는 Redux를 찾을 것입니다. 과잉이 아니며 대부분의 사람들이 필요로하는 베어 기능만으로 제공됩니다. 개발자와 기고자들은 어떤 코드가 제공되었는지 매우 엄격했습니다.

이것은이다 공식 페이지


1
현재 버전이 최신 버전의 Code Igniter를 지원합니까? 아주 오랫동안 업데이트가 없었던 것 같습니다. 그렇지 않으면 나는 그것을 좋아한다.
GavinR

프로덕션 사이트에서 최신 CI 버전으로 Redux를 사용하고 있습니다. CI와 마찬가지로 매우 가볍고 사용자 정의가 가능합니다.
GloryFish

1
Redux는 더 이상 유지 관리됩니다 (이 토론 참조). codeigniter.com/forums/viewthread/145342
픽셀 개발자

Ion Auth는 Redux Auth 2를 기반으로하며 내가 사용할 것입니다. PyroCMS도 그것을 사용합니다. github.com/benedmunds/CodeIgniter-Ion-Auth
Robert Audi

8

Ion_Auth는 주로 사용자 역할과 문서화의 두 가지 이유로 tank_auth를 능가합니다.이 두 가지가 tank_auth에서 누락되었습니다.



4

또한 살펴보세요 BackendPro도

궁극적으로 아마도 사용자 정의 무언가를 작성하지만 DX Auth, Freak Auth, BackendPro 등에서 빌린 개념에는 아무런 문제가 없습니다.

패키지 응용 프로그램에 대한 나의 경험은 특정 구조와 관련이 있으며 해킹을 요구하지 않고 자체 응용 프로그램에 통합하는 데 문제가 있었으며 사전 패키지에 업데이트가 있으면 마이그레이션해야합니다.

또한 CI 코드에서 Smarty 및 ADOdb를 사용하므로 항상 주요 코드를 변경하더라도 결과는 달라집니다.


3

Tank Auth는 좋아 보이지만 설명서는 설치 방법에 대한 한 페이지 설명과 각 PHP 파일에 대한 간단한 설명입니다. 적어도 그것이 많은 인터넷 검색 후에 찾은 전부입니다. 어쩌면 사람들이 Tank Auth가 잘 문서화되었다고 말할 때 위의 의미는 코드가 주석 처리되어 있다는 것입니다. 좋은 일이지만 문서와는 다릅니다. Tank Auth의 기능을 기존 코드와 통합하는 방법에 대한 문서가 있으면 좋을 것입니다.


3

Ion_Auth를 시도하고 있으며 감사합니다.

SimpleLoginSecure 인증을 간단하고 안전하게 만듭니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.