2010-01-24 4 views
2

PHP에서 사용자 암호를 어떻게 암호화합니까?PHP를 사용하는 MySQL의 간단한 암호화 기술

초보자가 이해할 수있는 방식으로 설명해주십시오. 이미이 샘플 코드가 있습니다.

$password = "john856"; 
$encrypt_password = md5($password); 

echo $encrypt_password; 

암호화를 사용하지 않는 현재 코드에 어떻게 통합합니까?

<?php 
    $con = mysql_connect("localhost","root",""); 

    if (!$con) { die('Could not connect: ' . mysql_error()); } 

    mysql_select_db("koro", $con); 

    $sql="INSERT INTO users 
      (LNAME, FNAME, MNAME, UNAME, PW) 
      VALUES 
      ('$_POST[Lneym]', '$_POST[Fneym]', '$_POST[Mneym]', '$_POST[Uneym]', '$_POST[Pass]')"; 

    if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); } 

    echo "<script>alert('User added! You can now use the system.')</script>"; 

    mysql_close($con) 
?> 
+2

사람들이 작업하기를 원한다면 최소한 코드를 형식화해야합니다. –

+1

게시물 서식 지정에 대한 자세한 내용은 markdown 참조 페이지를 참조하십시오. http://stackoverflow.com/editing-help –

+2

해당 코드에서 심각한 mySQL 주입 문제가 있습니다. –

답변

3

나에게 더 중요한 점부터 시작하자 :

당신이해야 결코 패스를 직접 쿼리에 $ _POST 변수를 통해. 이로 인해 SQL injections에 매우 취약합니다. 당신은 적어도 최소한 모든 형태의 값에 mysql_real_escape_string()를 실행해야합니다

당신은 삽입 :

$Lneym = $_POST["Lneym"]; 
$Lneym_halfway_safe = mysql_real_escape_string($Lneym); 

.... 

$sql="INSERT INTO users 
      (LNAME, FNAME, MNAME, UNAME, PW) 
     VALUES 
      ('$Lneym_halfway_safe', 

당신은 다음 또한 MD5를 (통합 할 수 있습니다) 바로 : 다음

$PW = md5($_POST["PW"]); // no escape_string() needed here, 
          // the md5 checksum is safe 

'$PW'를 삽입 암호 필드.

가장 좋은 것은 PDO과 같은 데이터베이스 클래스를 사용하는 것입니다. 매개 변수화 된 쿼리 기능은 자동으로 SQL 주입을 방지합니다. 어쩌면 this tutorial이 도움이됩니다.

코드에 md5()을 추가 할 수 없기 때문에 (개인 비평은 아닙니다. 모두 한 번 시작했습니다.) 프로그래밍 기본 사항을 읽어 보시기 바랍니다. 웹 플랫폼에 대한 중요한 보안 기능을 복사하여 붙여 넣는 것은 끔찍한 위험이며 눈물을 떨칠 수 있습니다.

+0

-1 : 좋은 조언이지만 실제 질문에 대답하는 것과는 관계가 없습니다. –

+0

다시 읽어보십시오. 들어가 있습니다. –

+0

지금입니다. 나는 코멘트를 게시하기 전에 새로 고치지 않았다. –

1

실제로 존재합니다. MD5는 단방향 과정은 해시 알고리즘, 그러나,

$sql="INSERT INTO users 
      (LNAME, FNAME, MNAME, UNAME, PW) 
     VALUES 
      ('$_POST[Lneym]', '$_POST[Fneym]', '$_POST[Mneym]', '$_POST[Uneym]', '$encrypt_password')"; 

내가 추가해야합니다 :

$password=$_POST["pass"]; 
$encrypt_password=md5($password); 

을 다음 데이터베이스에 암호 필드에 $ encrypt_password를 삽입 : 코드를 실행 각 입력에 고유 한 문자열을 생성합니다 ("collisions aside"). 사용자 암호를 복구 할 수 없으므로 알 수 있습니다. 그러나 이것은 좋은 일이며 로그인을 확인할 수 있습니다. md5 값을 비교하면됩니다.

다음
$encrypt_password = mysql_real_escape_string(md5($_POST["pass"])); 
$lastname = mysql_real_escape_string($_POST[Lneym]); 
$firstname = mysql_real_escape_string($_POST[Fneym]); 
$midname = mysql_real_escape_string($_POST[Mneym]); 
$username = mysql_real_escape_string($_POST[Uneym]); 
$sql = "INSERT INTO users 
      (LNAME, FNAME, MNAME, UNAME, PW) 
      VALUES 
      ('$lastname', '$fistname', '$middlename', '$username', '$encrypt_password')"; 

로그인에 대해 : 다른 사람이 말했듯이

0

, 모든 변수를 탈출

$encrypt_password = mysql_real_escape_string(md5($_POST["pass"])) 
$username = mysql_real_escape_string($_POST[Uneym]); 
$sql = "SELECT LNAME, FNAME, MNAME, UNAME 
     WHERE UNAME = '$username' 
     AND PW = '$encrypt_password'"; 
-1

를 지금까지 내가 SHA-2를 사용하여도 MD5 나보다 더 나은 (더 안전한) 방법입니다 알고 암호를 해시하는 SHA-1

얼마 전이 페이지 튜토리얼을 CMS으로 사용했으며 실제로 잘 작동합니다.

http://hungred.com/useful-information/php-better-hashing-password/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+Hungredcom+%28Hungred.com%29 

비밀 번호를 보호하기 위해 개인 기능을 결합하려고하기 때문에 사용하기에 충분히 코드화되어 있으며 사용하기에 안전합니다.

관련 문제