2012-12-04 2 views
2

사용자가 메모를 추가하는 텍스트 영역이 있습니다. 다음 페이지에서 입력 한 내용을 표시하기 위해 $_POST[Comments]을 사용합니다. 돌아가서 입력 된 내용을보고 편집 할 수있는 편집 버튼이 있지만 $_POST[Comments]을 표시하면 아포스트로피까지 표시됩니다.PHP를 사용하여 텍스트 영역의 아포 스트로피를 MySQL에 전달하는 방법

예 : 원래 입력

: Let's try this.

편집 : 이제 내가 SQL 주입

을 방지하기 위해 다음과 같은 기능을 사용하여 SQL 추가 기능을 수행 할 서버로 통과 할 때 Let

function keepSafe($value) { 
     if (get_magic_quotes_gpc()) { 
      $value = stripslashes($value); 
     } 
     if (!is_numeric($value)) { 
      $value = "'" . mysqli_real_escape_string($value) . "'"; 
     } 
     return $value; 
    } 

다음은 SQL 삽입을 위해 입력 형식을 지정하는 데 사용하는 항목입니다.

$Comments = str_replace("\n","<br />",$_POST['CustComments']); 
    $Comments = keepSafe($_POST['Comments']); 

제출 전에 편집 할 때 노트 섹션에서 모든 아포스트로피를 볼 수 있어야합니다. 그리고 제출할 때 SQL injection이 안전한 코드를 방지하는지 확인하고 싶습니다.

+0

처음 사용'$ _POST [ 'CustComments']'다음'$ _POST [ '댓글']'마지막 예에서, 그 중요한 당신이 경우를 (그것은 당신에게해야합니다). 또한 (응답이 아닌) 당신은'\ n \ '대신 (Windows 관점에서)'\ r \ n'을 대체해야합니다. 또한 또한 (특정 답변이 아님), mysqli를 사용하기 때문에 직접 변수 삽입 대신에 prepared statement를 사용해야한다. – newfurniturey

+1

[대 탈주 (또는 : 텍스트 내에서 텍스트로 작업하기 위해 알아야하는 것)] (http://kunststube.net/escapism/) – deceze

+0

아주 오래된 소스에서 예제 코드를 얻은 것 같습니다. PHP에서 마술 따옴표는 오래 전에 삭제되었습니다. 이것을 올바르게 처리하는 방법은 준비된 진술이 필요한 것입니다. – GordonM

답변

5

아포스트로피의의 문제 :

당신은 아마 다음과 같이 입력을 사용 : 값이 아포스트로피가있는 경우

<input type='text' value='<?php echo $value;?>'/> 

문제는 이런 것을 :

<input type='text' value='Let's play'/> 

변수의 아포스트로피 때문에 값 태그가 종료되었습니다.

는 단순히 ENT_QUOTES에 반드시 htmlspecialchars를 사용하여 해결하려면 :

<?php 
$value = htmlspecialchars("Let's play", ENT_QUOTES); 
?> 
<input type='text' value='<?php echo $value; ?>'/> 

아포스트로피의 인코딩 얻을 및 양식은 SQL 주입에 대해

에서 편집 할 수있을 것입니다 그런 식으로 :

단순히 사용 mysqli's prepared statements 그리고 괜찮을 것입니다. 또한 XSS로부터 안전하게 지키려면 HTML 출력에 항상 htmlspecialchars 사용자 입력을 입력하십시오. 더 나은 것은 입력을 필요한 것만 필터링하고 필터링 된 입력 만 데이터베이스에 저장하는 것입니다.

+0

도움을 주셔서 감사합니다 :) – JukEboX

+0

제가 이것을 추가하겠습니다. myqsql 삽입을 사용하여 텍스트 영역에 아포스트로피를 db에 저장하는 방법 – JukEboX

+0

준비된 삽입을 사용해야합니다. 또는 mysqli_real_escape_string ("let 's play");을 사용할 수있다. (나는 준비된 문장을 추천한다. 나는 내 awnser에서 제공 한 링크에서 모든 것을 찾을 수있다) –

-1

사용 htmlspecialchars() 기능 텍스트 영역 태그를 생성 할 때 :

<textarea><?=htmlspecialchars($_POST['Comments'])?></textarea> 
+1

어포 스트로피는 텍스트 영역에서 중요하지 않습니다. 그리고 htmlspecialchars 만 아포스트로피를 인코딩하지 않습니다. ENT_QUOTES가 필요합니다. 그건 그렇고 :'

+0

존, 좋은 지적. 그냥 내 습관 일세. 절대로 문제가 없었습니다. – Geo

관련 문제