2011-10-02 7 views
3

가능한 중복 :
Preventing SQL Injection in C
C에서 SQL 쿼리를 어떻게 위생 처리합니까?

내가 PHP가 어떤 쿼리를 소독하는 데 도움이 기능이 내장되어 알고 있지만, C가 같은 것을해야합니까?

snprintf(&buff[0],1023,"UPDATE grades SET grade='%c' WHERE username='%s'",choice,&uname[0]); 

if (mysql_query(connect,&buff[0]) != 0) { 
    // If it failed, tell the user 
    printf("Error: %s!\n", mysql_error(connect)); 
    return; 
} 
+2

저는 준비된 문장을 지원하는 API가 거의 있다고 확신합니다. – cHao

+1

@cHao가 말했듯이, 입력 "sanitization"을 피하고 준비된 문으로 가면 C API [지원합니다] (http://dev.mysql.com/doc/refman/5.0/en/c-api-prepared-statements .html). –

답변

4

MySQL C API에는 mysql_real_escape_string() 기능이 있습니다.

+0

그 함수를 통해 쿼리를 전달한 후, 나는 ... "업데이트 등급 SET 등급 = \ 'WHERE username = \'학생 \ '"mysql_query로 실행하려고하면 구문 오류가 발생합니다. – Takkun

+0

이 메서드는 문자열을 수동으로 이스케이프하는 방법을 사용하지 않는 것이 좋습니다. 코드를 호출하는 것을 잊어 버린 날이 코드에 보안 문제가있는 날이기 때문입니다. 항상 매개 변수가 바인딩 된 prepared statement를 사용하십시오. –

1

C 언어와 런타임에는 이러한 루틴이 없습니다. 특정 데이터베이스의 특정 클라이언트 라이브러리에 뭔가가있을 수 있습니다.

관련 문제