2010-04-28 5 views

답변

7

아니요 :

ID, 사용자 이름, 비밀번호.

id는 자동 증가이며 사용자 이름은 사용자의 필요에 따라 varchar가 20 정도이며 암호는 MD5 또는 SHA1 해시 암호와 소금입니다.

이 두 테이블을 사용하는 것은 의미가 없습니다. 그런 다음 조인을 사용하여 데이터를 가져와야합니다. 그리고 그것은 단지 불필요한 부담입니다.

+3

소금도 테이블에 추가하는 것을 잊지 마십시오. –

+2

반드시 그렇게 할 필요는 없습니다. 모든 암호에 대해 하나의 소금을 사용할 수 있습니다. 데이터베이스가 해킹 당하면 소금이 없습니다. 데이터베이스에 추가하면됩니다. 소금의 개념은 최종 사용자가 최종 해시를 최종 제어 할 수 없다는 것입니다. – Snake

+0

모두에게 감사드립니다! 나는 소금에 절인 해시를 알고 있습니다. 두 개의 테이블을 가지고 있으면 중요한 보안 기능이 추가되는지 궁금합니다. 건배! – expora

0

아니요. 더 안전하지 않습니다. DB에 암호를 저장하기 전에 암호가 Salted + Hashed인지 확인하십시오.

6

아니요, 어떻게 그것이 더 안전 해지는 지 알 수 없습니다.

실제로 암호를 저장하지 마십시오. 그들의 소금에 절인 해시를 저장하십시오.

추가 읽기 :

+0

링크를 제공해 주셔서 감사합니다! – expora

+2

+1 절대적으로 - 해시가 동일하면 비교할 필요가 있습니다. –

0

- 그것에게 완전한 고통을 조회 할 것이다 - 심지어 다음과 해커 하나의 로그인을 만들었으므로 상대방을 얻을 수있는 가능성이 있습니다.

SHA-2와 같은 보안 해시와 소금을 사용하여 해시 형태로 비밀번호를 저장하고 있는지 확인하십시오. 일반 텍스트로 저장하지 말고 (IMHO) 암호화하여 저장하지 마십시오.

+0

아담 감사합니다. 나는이 파장을 생각하면서 해커가 모든 것에 접근 할 수 있었 을까? 나는/etc/passwd와/etc/shadow와 같은 유닉스와 파일에 대해 조금 배우면서 나에게 일어난 일이라고 생각한다. 내 질문에 대한 답변을 읽은 후에는 웹 응용 프로그램에서이 아이디어가 도움이되지 않는다는 것이 분명해졌습니다 (유닉스 케이스에는 역사가 없습니다). – expora

1

다른 사람들과 동의하지 않습니다. 인증 정보를 별도의 테이블에 넣고 가능한 한 최대한 응용 프로그램에서 인증을 끌어 오십시오. 당신은 신경 쓰지 않아야합니다. siteminder 등을 생각해보십시오. 웹 응용 프로그램에는 사용자의 인증 방법에 대한 정보가 없습니다. 암호, 스마트 카드 등 (데스크탑 응용 프로그램에서 Kerberos 또는 Active Directory와 동일)

이 방법은 스프링 보안과 같은 프레임 워크를 사용하는 경우에도 작동합니다. 인증 테이블 만 보도록 인터셉터를 설정하십시오. 인터셉터가 애플리케이션 데이터를 볼 수 없도록, 또는 그 반대의 경우에도 별도의 데이터 소스를 사용할 수도 있습니다.

분명히 응용 프로그램은 여전히 ​​사용자의 권한 부여에 대한 정보를 관리해야합니다. 일반적으로 '역할'테이블에서 처리됩니다. 그러나 사용자가 어떻게 인증 받았는지 알 필요가 없습니다.

+0

별도의 테이블에 사용자 이름과 암호를 저장하면 응용 프로그램이 인증을 처리하는지 여부에 어떤 영향을 미칩니 까? – Matthew

0

Btw, 이미 꽤 간단한 (강력한) C# 솔리드 해시 클래스 라이브러리 (라이브러리 사용 방법에 대한 간단한 데모 포함)가 있습니다. Link.

은 또한, (그래서 당신이 올바른 암호와 같이 사용자의 입력을 확인할 수 있습니다) 및 해시 알고리즘 자신 (SHA1/MD5/등.) 어떤 보안 혜택이 없습니다

0

를 선택할 수있는 검증 메커니즘을 제공하지만, 여러 테이블을 사용하면 단일 로그인에 연결된 여러 시스템에 자격 증명을 저장하는 데 유용 할 수 있습니다.

위에서 언급했듯이 비밀번호에 대해 소금에 절인 해시로 보안을 제공해야합니다.

관련 문제