2013-11-23 3 views
0

PDO를 사용할 수 없습니다.데이터 sanitize PHP 함수

많은 질문을 읽었습니다. 사무실 밖에있는 사람들을 위해 처음 시도한 것이므로 데이터 입력을 위생적으로 조사해야하며이 기능을 발견했습니다.

function clean_data($input){ 
$input = trim(htmlentities(strip_tags($input,","))); 
if (get_magic_quotes_gpc()) 
$input = stripslashes($input); 
$input = mysql_real_escape_string($input); 
return $input; 
} 

예 :

그것의 확인 데이터를 소독하기 위해이 기능을?

+0

이 방법은 끔찍하며 데이터가 손상되어 끊어집니다. 적절한 위생 방법을 사용하여 데이터를 사용하기 전에 데이터를 그냥 살균합니다. 예 : mysql_query()를 실행하기 전에 mysql_real_escape_string()을 호출한다. 또는 웹 페이지에 아무것도 출력하기 전에'htmlentities()'를 사용하십시오. 그러나 PDO 나 mysqli는 실제로이 코드를 사용하여 –

+0

이 될 것입니다. SQL 삽입을 피하는이 코드를 사용하면 '$ sql = "INSERT INTO 클라이언트 VALUE (NULL, : iduser, : nombre : : cedula, : dir, : tel)"; $ query = $ db-> prepare ($ sql); $ query-> execute (array ( ': iduser'=> ($ _ POST [ 'id']), ': nombre'=> ($ _ POST [ 'nombre']), ': cedula'=> )) : ': dir'=> ($ _ POST [ 'dir']), ': tel'=> ($ _ POST [ 'tel']) – CCortina

답변

1

아니요.

변수를 데이터베이스에 저장하려는 경우 바인드 된 변수가있는 준비된 문을 사용하는 것이 좋습니다. PDO를 사용할 수 없다면 mysqli으로도 가능합니다. 실제로 mysql_* 함수가 붙어 있다면 mysql_real_escape_string 만 필요합니다.

브라우저로 출력하면 htmlspecialchars 만 필요합니다.

즉, 보편적 인 위생 기능이 없기 때문에 출력 할 매체에 대한 데이터를 준비/이스케이프/인코딩해야합니다.

0

이것은 매우 중요한 주제입니다.이 기능은 정상적으로 작동하지만 훨씬 더 좋은 방법이 있습니다.

확인 mysqli_real_escape_string : http://php.net/manual/en/pdo.prepared-statements.php 또한

, 귀하의 의견은 정수 유형의 것 인 경우 http://php.net/manual/en/mysqli.real-escape-string.php

준비된 문을 잊지 마세요

? 당신은 타이 캐스팅해야합니다.

누군가가 웹 양식에 필드를 추가하면 어떻게 될까요?

이 기능은 약간의 sanitisation을하지만, 나는 광대 한 주제라고 말한 것처럼 빙산의 일각에 지나지 않습니다.

내 의견으로는 이것은 약간의 보호 기능을 제공하는 코드가 엉성한 것입니다.