2014-11-28 9 views
0

: 내가 거기, 데이터베이스에 생성 된 소금을 삽입하려고 할 때SHA256는 PHP와 MySQL과 소금 - 삽입 오류 내가 MySQL 데이터베이스에 소금과 해시 암호에 다음 코드를 사용하고

<?php 
function make($string, $salt = '') { 
    return hash('sha256', $string . $salt); 
} 
function salt($length) { 
    return mcrypt_create_iv($length, MCRYPT_DEV_URANDOM); 
} 

$salt = salt(32); 
$password = make('password', $salt); 
?> 

이 오류가 발생하는 몇 가지 경우가 있습니다.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ÜöOòƒ·¡]ŽÖ', 1)' at line 1 

나는 인식 할 수없는 문자가 생성되어 있기 때문입니다. 이것에 대한 해결책은 무엇입니까?

+0

삽입 코드를 표시합니다. –

답변

3

원시 이진 쓰레기를 삽입하고 있습니다. 자연스럽게 (그리고 무작위로) '과 같은 SQL 메타 문자가 포함됩니다. 이는 귀하의 질의가 sql injection attacks에 취약하다는 것을 의미합니다.

실제 PHP 코드는 표시하지 않지만 준비된 문을 사용하거나 수동 이스케이프를 사용해야합니다. 예 :

$stmt = mysqli_prepare($conn, "INSERT .... (password_hash) VALUES (?)"); 
$stmt->execute(array($raw_hash)); 

또는 다른 방법으로

$quoted = mysql_real_escape_string($raw_hash); 
$sql = "INSERT ... (password_hash) VALUES ('$quoted')"; 

, 그 해시 문자열을 인코딩 할 수있다, 예를 들어, base64를 사용하여 인코딩 된 해시가 상대적으로 무해한 문자열이되도록합니다. 그러나 그럼에도 불구하고 적절한 쿼리 생성 기술을 사용해야합니다.