⊗ppPmAuAHS 425 of 447 menu

인증 과정에 솔트 추가하기

이제 우리는 인증 방식을 변경해야 합니다. 여기서는 변경 사항이 더욱 실질적일 것입니다.

더 이상 로그인-패스워드 쌍을 하나의 쿼리로 즉시 확인하는 것은 불가능합니다. 그 이유는: 패스워드를 확인하려면 솔팅된 해시를 얻어야 하는데, 솔트는 데이터베이스에 저장되어 있으며 각 로그인마다 고유하기 때문입니다.

먼저 로그인으로만 레코드를 가져와서 솔트를 읽고, 입력된 패스워드에 솔트를 추가한 후 데이터베이스의 솔팅된 패스워드와 비교해야 하며, 오직 그것들이 일치할 때만 사용자를 인증해야 합니다.

로그인이 잘못 입력된 경우도 있을 수 있다는 점을 유의하세요. 이 경우 패스워드 확인을 수행할 필요 없이, 즉시 인증이 불가능하다는 메시지를 표시할 수 있습니다:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { // 해당 로그인을 가진 사용자가 있음, 이제 패스워드를 확인해야 함... } else { // 해당 로그인을 가진 사용자가 없음, 메시지를 출력함 } ?>

패스워드 확인을 추가해 봅시다:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $salt = $user['salt']; // DB에서 가져온 솔트 $hash = $user['password']; // DB에서 가져온 솔팅된 패스워드 $password = md5($salt . $_POST['password']); // 사용자로부터의 솔팅된 패스워드 // 솔팅된 해시를 비교함 if ($password == $hash) { // 모두 정상, 인증함... } else { // 패스워드가 일치하지 않음, 메시지를 출력함 } } else { // 해당 로그인을 가진 사용자가 없음, 메시지를 출력함 } ?>

보안을 위해 일반적으로 사용자에게 무엇이 맞지 않는지(로그인인지 패스워드인지) 알려주지 않습니다. 이는 해커가 로그인-패스워드 쌍을 추측하는 것을 어렵게 만들기 위함입니다. 단순히 로그인-패스워드 쌍이 잘못되었다는 메시지나 이와 유사한 내용을 표시합니다.

위에서 설명한 솔팅된 패스워드 인증을 구현하세요. 회원가입을 하고, 로그인을 시도하여 모든 것이 작동하는지 확인해 보세요.

한국어
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақКыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부