암호를 해시하려고 할 때 DB에 Null 값이 입력 됨

Stuart_M65

나는 과거에 프로젝트에 PHP를 소량 사용했지만 암호를 해시하려고 시도하면서 새로운 것을 시도하고 있습니다.

별도의 페이지에는 checkRegistration.php 양식으로 제출시 리디렉션되는 웹 양식이 있습니다.이 양식은 데이터베이스에 연결하고 사용자 값을 가져 와서 확인한 다음 해당 열에 입력합니다.

지금까지 전달되는 모든 값은 "0"으로 입력되거나 비어있는 password_hash 함수에 의해 전달되는 값을 제외하고 올바르게 입력되고 있습니다. 나는 그것이 0이기 때문에 올바르게 처리되지 않고 내가 뭘 잘못하고 있는지 궁금합니다.

<?php
$con = mysqli_connect("127.0.0.1","root","","projectdatabase");


if (mysqli_connect_errno())
 {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
 }

 $password_user_input = $_POST['password'];
 $options = array('cost' => 10);


$sql="INSERT INTO user_information (firstName, lastName, userName, password, email, contactNum)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[uname]','password_hash($password_user_input, PASSWORD_BCRYPT, $options)','$_POST[email]','$_POST[number]')";

if (!mysqli_query($con,$sql))
{
  die('Error: ' . mysqli_error($con));
}
  header("location:login.php");

mysqli_close($con);

?>

펑크 포티 니너

password_hash()함수를 올바르게 사용 하지 않고 VALUES에 함수를 전달할 수 없습니다.

정의되지 않은 함수임을 알리는 오류가 발생했거나 받았어야합니다. 그렇지 않으면 암호 열에 password_hash(hashed_password_string, PASSWORD_BCRYPT, Array)문자열 이 포함 됩니다. 테스트 할 때받은 두 가지 결과입니다.

수행해야 할 작업은 다음과 같습니다.

변수를 미리 정의하고 함수에 전달해야합니다.

$password_user_input = $_POST['password'];
$options = array('cost' => 10);

$pass = password_hash($password_user_input, PASSWORD_BCRYPT, $options);

$sql="INSERT INTO user_information (firstName, lastName, userName, password, email, contactNum) 
VALUES 
('$_POST[firstname]','$_POST[lastname]','$_POST[uname]','$pass','$_POST[email]','$_POST[number]')";

그러나이 방법을 사용하면 SQL 주입이 가능 합니다.

사용 제표를 작성 , 또는 PDO 준비된 문으로 , 그들은 훨씬 더 안전있어 .


다음은 준비된 진술과 함께 PDO를 사용하여 ircmaxell의 답변 https://stackoverflow.com/a/29778421/ 에서 가져온 방법 입니다.

라이브러리를 사용하십시오. 진지하게. 그들은 이유가 있습니다.

스스로하지 마십시오. 자신의 소금을 만들고 있다면 잘못하고있는 것 입니다. 이를 처리하는 라이브러리를 사용해야합니다.

$dbh = new PDO(...);

$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);

$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);

그리고 로그인시 :

$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
    if (password_verify($_POST['password'], $users[0]->password) {
        // valid login
    } else {
        // invalid password
    }
} else {
    // invalid username
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

테스트를 위해 사이트를 사용하여 가입하려고 할 때마다 이메일 텍스트 상자에 오류가 표시됨

분류에서Dev

NSPredicate로 인해 UISearchBar에 입력 할 때 앱이 중단됨

분류에서Dev

인터페이스를 불러 오려고 할 때 "RTNETLINK 답변 : 입력 / 출력 오류"가 표시됨

분류에서Dev

kendo.mobile.Applicaiton에 변수를 강력하게 입력 할 때 TypeScript에서 속성이 누락 됨

분류에서Dev

"su"명령을 사용하여 터미널에 암호를 입력 할 때 암호를 볼 수 없습니다.

분류에서Dev

Ubuntu 13.10에서 활성 사용자를 변경할 때 이중 암호 입력

분류에서Dev

이미지 시퀀스를 변환하려고 할 때 FFMPEG에서 "해당 파일 또는 디렉토리가 없습니다"라고 표시됨

분류에서Dev

텍스트 상자에 데이터를 입력 / 입력 할 때 표시 할 입력 된 값 가져 오기

분류에서Dev

DELETE 요청을 할 때 암호를 입력하십시오.

분류에서Dev

/ etc / sudoers 파일에 "NOPASSWD"를 지정할 때 sudo 암호를 입력하라는 메시지가 나타나는 이유는 무엇입니까?

분류에서Dev

DB에서 엔티티를 찾으려고 할 때 EntityManager가 null입니다.

분류에서Dev

DB에서 엔티티를 찾으려고 할 때 EntityManager가 null입니다.

분류에서Dev

django / python 웹 사이트에서 서버를 시작하려고 할 때 오류가 표시됨

분류에서Dev

Fingerprint API 암호를 해독하려고 할 때 BadPaddingException이 발생했습니다.

분류에서Dev

입력에 3 개 이상의 값을 사용하려고 할 때 ValueError

분류에서Dev

MySqlCommandBuilder를 사용할 때 DataGridview에서 시간 값을 업데이트 할 때 날짜 값이 변경됨

분류에서Dev

DynamoDB에 데이터를 쓰려고 할 때 Lambda 함수가 시간 초과 됨

분류에서Dev

비밀번호 입력 필드가 비어 때 어떻게 내가 Laravel에 암호를 업데이트하지 않도록 할 수 있습니까?

분류에서Dev

mysql에 데이터를 입력하려고 할 때 몇 가지 오류

분류에서Dev

YouTube에 비디오를 업로드하려고 할 때 "잘못된 멀티 파트 본문"이 표시됨

분류에서Dev

입력이 값을 변경할 때 Javascript에서 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

md5가 AWS Redshift에서 암호를 해싱 할 때 암호 인증이 실패하는 이유는 무엇입니까?

분류에서Dev

PHP를 사용하여 base64 암호화 된 이미지를 인쇄 할 때 이미지가 손상됨

분류에서Dev

Windows 10에서 암호를 입력하라는 메시지가 표시됨

분류에서Dev

WPA2 암호화를 사용할 때 컴퓨터가 시작된 직후 무선 작동이 중지됨

분류에서Dev

데이터를 해독 할 때 암호화 된 것과 다른 값을 얻는 이유는 무엇입니까?

분류에서Dev

자식 Reactjs에서 부모 함수를 호출 할 때 잘못된 값이 표시됨

분류에서Dev

VOLTTRON 에이전트를 설치하려고 할 때 입력 / 출력 오류가 발생합니다.

분류에서Dev

Razor 페이지 암호 입력 상자에 기본 점이 계속 표시됨

Related 관련 기사

  1. 1

    테스트를 위해 사이트를 사용하여 가입하려고 할 때마다 이메일 텍스트 상자에 오류가 표시됨

  2. 2

    NSPredicate로 인해 UISearchBar에 입력 할 때 앱이 중단됨

  3. 3

    인터페이스를 불러 오려고 할 때 "RTNETLINK 답변 : 입력 / 출력 오류"가 표시됨

  4. 4

    kendo.mobile.Applicaiton에 변수를 강력하게 입력 할 때 TypeScript에서 속성이 누락 됨

  5. 5

    "su"명령을 사용하여 터미널에 암호를 입력 할 때 암호를 볼 수 없습니다.

  6. 6

    Ubuntu 13.10에서 활성 사용자를 변경할 때 이중 암호 입력

  7. 7

    이미지 시퀀스를 변환하려고 할 때 FFMPEG에서 "해당 파일 또는 디렉토리가 없습니다"라고 표시됨

  8. 8

    텍스트 상자에 데이터를 입력 / 입력 할 때 표시 할 입력 된 값 가져 오기

  9. 9

    DELETE 요청을 할 때 암호를 입력하십시오.

  10. 10

    / etc / sudoers 파일에 "NOPASSWD"를 지정할 때 sudo 암호를 입력하라는 메시지가 나타나는 이유는 무엇입니까?

  11. 11

    DB에서 엔티티를 찾으려고 할 때 EntityManager가 null입니다.

  12. 12

    DB에서 엔티티를 찾으려고 할 때 EntityManager가 null입니다.

  13. 13

    django / python 웹 사이트에서 서버를 시작하려고 할 때 오류가 표시됨

  14. 14

    Fingerprint API 암호를 해독하려고 할 때 BadPaddingException이 발생했습니다.

  15. 15

    입력에 3 개 이상의 값을 사용하려고 할 때 ValueError

  16. 16

    MySqlCommandBuilder를 사용할 때 DataGridview에서 시간 값을 업데이트 할 때 날짜 값이 변경됨

  17. 17

    DynamoDB에 데이터를 쓰려고 할 때 Lambda 함수가 시간 초과 됨

  18. 18

    비밀번호 입력 필드가 비어 때 어떻게 내가 Laravel에 암호를 업데이트하지 않도록 할 수 있습니까?

  19. 19

    mysql에 데이터를 입력하려고 할 때 몇 가지 오류

  20. 20

    YouTube에 비디오를 업로드하려고 할 때 "잘못된 멀티 파트 본문"이 표시됨

  21. 21

    입력이 값을 변경할 때 Javascript에서 함수를 호출하는 방법은 무엇입니까?

  22. 22

    md5가 AWS Redshift에서 암호를 해싱 할 때 암호 인증이 실패하는 이유는 무엇입니까?

  23. 23

    PHP를 사용하여 base64 암호화 된 이미지를 인쇄 할 때 이미지가 손상됨

  24. 24

    Windows 10에서 암호를 입력하라는 메시지가 표시됨

  25. 25

    WPA2 암호화를 사용할 때 컴퓨터가 시작된 직후 무선 작동이 중지됨

  26. 26

    데이터를 해독 할 때 암호화 된 것과 다른 값을 얻는 이유는 무엇입니까?

  27. 27

    자식 Reactjs에서 부모 함수를 호출 할 때 잘못된 값이 표시됨

  28. 28

    VOLTTRON 에이전트를 설치하려고 할 때 입력 / 출력 오류가 발생합니다.

  29. 29

    Razor 페이지 암호 입력 상자에 기본 점이 계속 표시됨

뜨겁다태그

보관