2014-09-15 2 views
0

게시 할 때 작은 스크립트를 실행하는 데이터 양식을 만들었습니다. 간헐적 인 버그가 있습니다. 스크립트는 항목을 데이터베이스에 기록하거나 죽은 다음 세부 정보가 포함 된 전자 메일을 보내야합니다. 나는 이메일의 100 %를 얻지 만 항목의 약 90 % 만 실제로 db에 기록됩니다. 어떤 사람이 여기에서 문제를 식별 할 수 있습니까? 감사합니다 -데이터 양식을위한 프로세스 스크립트 - 간헐적 인 버그

$name=$_POST[name]; 
$email=$_POST[email]; 
$state=$_POST[state]; 
$phone=$_POST[phone]; 
$comments=$_POST[comments]; 
$today = date("F j, Y, g:i a"); 

include("config.php"); 
$link = mysqli_connect("$db_host" , "$db_user" , "$db_password" , "$db") or die(); 
mysqli_select_db($link, $db) or die(); 

mysqli_query($link,"INSERT INTO form (name,email,state,phone,comments,date) 
VALUES ('$name','$email','$state','$phone','$comments','$today')"); 

$Body= " \n"; 
$Body .= "Contact Request From my_site.com\n\n"; 
$Body .= "Name: $name\n"; 
$Body .= "Email: $email\n"; 
$Body .= "State: $state\n"; 
$Body .= "Telephone: $phone\n"; 
$Body .= "Comments: $comments\n"; 

$Body .= "\n"; 

mail ("[email protected]_site.com", "Contact Request From my_site.com", $Body, "From: $email"); 

header("Location: https://www.my_site.com/thank-you/"); 
die(); 
+0

당신은 오류를 검사하지 않습니다. mysqli_error()를 호출하면 신비가 풀릴 것이다. –

+0

나중에 검토 할 수 있도록 db에 오류를 기록하는 방법은 무엇입니까? 언급했듯이 시간의 약 10 % 만 실패합니다. – BradM

+3

POST 매개 변수를 벗어나지 않습니다. 이들 중 하나에 따옴표가 포함되어 있으면 SQL에 구문 오류가 발생합니다. 당신은'bind_param'을 사용하거나'mysqli_real_escape_string'을 사용하지 않아야한다. – Barmar

답변

0

해결되었습니다!

POST 값은 문자열로 이스케이프되지 않습니다. 단일 인용문을 포함하는 모든 값은 SQL 인수를 끝내고 SQL 오류를 던지고 실제로 취약점 (예 : SQL 삽입)을 여는 중입니다.

수정 :

$name=$_POST[name]; 
$email=$_POST[email]; 
$state=$_POST[state]; 
$phone=$_POST[phone]; 
$comments=$_POST[comments]; 
$today = date("F j, Y, g:i a"); 

include("config.php"); 
$link = mysqli_connect("$db_host" , "$db_user" , "$db_password" , "$db") or die(); 
mysqli_select_db($link, $db) or die(); 

$name=mysqli_real_escape_string($link, $name); 
$email=mysqli_real_escape_string($link, $email) ; 
$state=mysqli_real_escape_string($link, $state) ; 
$phone=mysqli_real_escape_string($link, $phone) ; 
$comments=mysqli_real_escape_string($link, $comments); 
관련 문제