2010-04-23 4 views
1

그래서 기본 로그인 페이지를 만들고 있습니다. 나는 무엇을 해야할지에 대한 좋은 생각을 가지고 있지만, 나는 아직도 어떤 것들에 대해 확신하지 못하고있다.기본 보안, PHP mySQl

나는 학생들과 암호로 가득 찬 데이터베이스를 가지고있다. 나는 그 칼럼에서 md5 암호화를 사용할 것이라는 것을 알고있다. 학생은 이메일과 학생 신분증을 입력하고 올바른 경우 전자 메일로 암호를받습니다.

하지만 비밀번호는 어디에서 생성합니까? 모든 학생에게 mySQL에 비밀번호 (무작위로 생성 된 문자열)를 수동으로 추가해야합니까? 그리고 나는 학생에게 패스워드를 보낸다고 가정한다; 비밀번호가 암호화되어 있다면 학생을 어떻게 보내야하는지 어떻게 알 수 있습니까?

학생이 전자 메일과 학생 ID를 처음 입력 할 때 암호를 생성하려고 생각했습니다. 그들은 임의 문자열의 전자 메일을 받고 동시에 암호화 된 동일한 임의 문자열을 데이터베이스에 추가합니다.

그래도 작동하는 방법이 있습니까? 그리고 같은 페이지에서 모든 것을하는 것은 안전하지 않다고 생각합니다.

죄송합니다. 나는이 모든 것을 동시에 발견한다. (AES와 RSA 암호화 : O)

답변

4

몇 가지 : 당신은 정말 그것을 암호화되지 않은

  1. , 당신은 그것을 해시하고 있습니다. 혼란스러워하는 초보자를위한 쉬운 일이지만, 그냥 방해하지 않으려 고합니다.

  2. MD5를 사용하지 마십시오. 매우 안전한 해시는 아닙니다. 가능한 경우 SHA 변형 중 하나를 사용하십시오.

  3. 암호를 해시하지 않는 것이 좋습니다. 암호를 "염탐"하고 싶을 수도 있습니다. 기본적으로 이것은 해시하기 전에 임의의 문자열을 암호에 추가하고 나중에 임의로 문자열을 저장하여 사용자가 암호를 입력 할 때 해시를 확인할 수 있도록합니다. 사전 계산 된 사전 공격을 막을 수 있습니다. 나는 단지 그들이 자신의 계정을 만들 때 다음, 그들에게 이메일을 보내, 그것을 생성을 해시하고 해시 (및 임의의 소금을 저장하는 것 - 암호 생성에 관해서는

, 난 당신이 올바른 궤도에 있다고 생각)를 DB의 사용자 레코드에 추가합니다. 이전 답변에 추가 선택한 해싱 방법에 따라

1

패스워드를 생성하는 경우 패스워드를 생성하고 생성 된 패스워드를 학생에게 보낸다. 그 암호를 MD5 데이터베이스에 저장하십시오. 누군가 로그인 할 때 MD5는 양식에 제출 한 암호를 해시와 비교하여 해시를 데이터베이스의 암호와 비교합니다. 일치하면 로그인에 성공했습니다. 여기

0

프로세스는 다음과 같이 진행됩니다

1 .- 그것은이다 암호를 학생들이 자신의 ID 및 이메일 주소를 입력 처음 생성하는 것이 좋습니다.

2. 데이터를 제출하면 선택한 해싱 방법을 사용하여 무작위로 비밀번호를 생성하여 DB에 저장합니다.

3. 사용자가 로그인하려면 ID와 암호를 묻고 입력 된 암호에 해싱 방법을 사용하여 저장된 암호와 비교하십시오.

4.- 비밀번호를 잊어 버렸고 해싱 방법이 취소되거나 취소 될 수없는 경우 학생의 이메일에 전송 된 임시 링크를 만들어 새 비밀번호를 만드는 방법을 구현해야합니다. 이전 비밀번호를 가져올 방법이 없으므로 . 해싱 방법을 바꿀 수 있다면 아무런 문제가 없습니다. 해시를 해시 한 후 이메일로 보내주십시오.

희망이 조금에게 공정 :

+0

4 - 나는 어떤 이유로 든 평범한 텍스트 암호를 다른 사람에게 보내지 말 것을 제안합니다. 임시 링크 방법을 사용하여 학생이 새 것을 만들게하십시오. – Jayrox

1

귀하의 PHP 등록시 암호를 생성해야을 명확하게. 학생에게 암호를 이메일로 보낸 다음 해싱 기능을 통해 실행하십시오 (md5()는 괜찮지 만 sha1()은 더 좋습니다). DB에 해시를 저장하고 원래 암호를 버리십시오. 그렇게해도 당신은 그것이 무엇인지 알 수 없습니다.

사용자가 로그인하면 입력 된 암호를 해시하고 DB에 저장된 해시와 비교합니다. 일치하면 사용자가 올바른 암호를 입력합니다.