2013-05-14 3 views
0

그래서 꽤 기본적인 코드를 가지고있어 제대로 작동하지 않습니다. ezSQL 클래스 (http://justinvincent.com/ezsql)를 사용하고 있지만 잘 작동합니다. sanitize 함수 (get_post)를 사용하려고 할 때를 제외하고는 모든 것이 잘 작동합니다. 나는 get_post 함수를 호출 할 때 sanitizeString과 sanitizeMySQL이라는 두 개의 다른 함수를 사용하고있다. 만약 내가 $ _POST SQL 테이블에 데이터를 바로, 그것은 잘 작동합니다. 그것이 깨지는 포스트 기능을 통해서 갈 때만입니다. 여기에 게시 비트는 다음과 같습니다PHP 게시 기능을 사용하는 데 이상한 문제가 발생했습니다.

if (isset($_POST['username']) && 
isset($_POST['password'])) 
{ 
    $username = get_post('username'); 
    $password = get_post('password'); 
    $db->query("INSERT INTO users VALUES ('$username', '$password')"); 
} 

내가 말했듯이, 나는 클래스 (즉, $ DB-> 쿼리 물건에 대해 무엇이다) 사용하고 있지만, 완벽하게 작동하고. 나는이에 코드를 변경하는 경우 :

if (isset($_POST['username']) && 
isset($_POST['password'])) 
{ 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    $db->query("INSERT INTO users VALUES ('$username', '$password')"); 
} 

그것을 잘 작동합니다. 여기에 내가 살균을 위해 사용하고 세 가지 기능은 다음과 같습니다 심지어 단지는 mysql_real_escape_string 수익을 포함하도록 get_post 기능을 변경 시도했습니다, 심지어 작동하지 않는

// Sanitize Functions 
function sanitizeString($var) 
{ 
if (get_magic_quotes_gpc()) $var = stripslashes($var); 
$var = htmlentities($var); 
$var = strip_tags($var); 
return $var; 
}  

function sanitizeMySQL($var) 
{ 
$var = mysql_real_escape_string($var); 
$var = sanitizeString($var); 
return $var; 
}  

function get_post($var) 
{ 
return sanitizeMySQL($_POST['$var']); 
} 

. 또한 get_post 함수를 사용하려고 할 때 실제로 어떤 일이 발생하는지 분명히해야합니다. 테이블에 새로운 행을 만드는 것처럼 보이지만 완전히 비어있는 셀이 있습니다. 너희들 내가 잘못하고있는 것에 대해 약간의 빛을 비추 길 바랍니다! 나는 꽤 숙련 된 프론트 엔드 개발자이지만 서버 측 물건으로 로프를 배울 것입니다. 고마워요 :)

ninjaEdit :이 질문은 Are these two functions overkill for sanitization?입니다.이 기능은 제 거 기능을 향상 시키는데 분명 도움이되지만, 실제로 제 위치에서 작동하지 않는 이유와 관련이 없습니다.

+0

sanitizeMySQL이 경우 (get_magic_quotes_gpc()) $ var에 = 위해서 stripslashes ($ var에)'해야한다;'__then__'$ var에 =는 mysql_real_escape_string ($ var에)'만. mysql 인코딩 된 문자열로 엉망이되므로 더 이상 올바르게 이스케이프 처리되지 않았습니다. – Waygood

+0

pdo와 prepared statements를 사용하도록 고려 했습니까? 이 엔진을 사용하면 param PDO를 바인드 할 때 이스케이프 처리에 신경 쓸 필요가 없습니다. – Robert

+0

PDO를 사용하고 진술서를 준비했습니다. 제안 해 주셔서 감사합니다! 그래도 확실하지 않은 경우에만 바인딩 매개 변수를 사용하여 이상을 살균해야합니다 – user2380943

답변

1

왜 주위에 을 넣었습니까? 당신

+0

고마워 :) 나는 지금 준비 문을 사용하고 있습니다 – user2380943

0

mysql_real_escape_string() 당신이 할 수있는 마지막 일해야합니다 당신은이 문자를 이스케이프 있도록 return sanitizeMySQL($_POST[$var]);

당신이 준비된 명령문을 사용해야해야 get_post 기능에

는 데이터베이스 사용의 문자열이 준비 확인합니다. mysql_real_escape_string를 AFTER 이스케이프 된 문자열로 주위 재생 쿼리

// Sanitize Functions 
function sanitizeString($var) 
{ 
    if (get_magic_quotes_gpc()) $var = stripslashes($var); 
    $var = htmlentities($var); 
    $var = strip_tags($var); 
    return $var; 
}  

function sanitizeMySQL($var) 
{ 
    $var = sanitizeString($var); 
    $var = mysql_real_escape_string($var); 
    return $var; 
}  

function get_post($var) 
{ 
    return sanitizeMySQL($_POST[$var]); 
} 

추신에 대한 쓸모없는 문자열을 렌더링 할 수 게시 색인의 이름 대신 변수를 전달하면 get_post()가 더 잘 작성됩니다.

function get_var($var) 
{ 
    return sanitizeMySQL($var); 
} 

get_var($_POST['message']); 
get_var($_POST['message'][0]); // array elements on the form 
get_var($_GET['index']); // GET parameter 
get_var($_FILES['file']['name']); // original name of uploaded file