2012-04-21 3 views
1

다음 코드는 google api 액세스를 사용하는 데 필요한 부분입니다. connectDb() 한 후,이 라인

$q = sprintf("select * from users where google_user_id='%s' limit 1", r($me->id)); 

...// and more afterwards 

$q = sprintf("insert into users (google_user_id, google_email, google_name, google_picture, google_access_token, created, modified) values ('%s','%s','%s','%s','%s',now(),now());", 
    r($me->id), 
    r($me->email), 
    r($me->name), 
    r($me->picture), 
    r($me->access_token)); 

내가 무엇을하고 있는지 r($me->id) 모르겠습니다. "r"은 무엇입니까?

더 자세한 코드는 여기에 있습니다 : 그것은 코드에 존재하지 않는 것에 따라 하나 확신 할 수 없다 동안

// get profile 
$params = array(
    'client_id' => CLIENT_ID, 
    'client_secret' => CLIENT_SECRET, 
    'code' => $_GET['code'], 
    'redirect_uri' => SITE_URL.'redirect.php', 
    'grant_type' => 'authorization_code' 
); 
$url = 'https://accounts.google.com/o/oauth2/token'; 

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_POST, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params)); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 

$rs = curl_exec($curl); 
curl_close($curl); 

$json = json_decode($rs); 

$url = 'https://www.googleapis.com/oauth2/v1/userinfo?access_token='.$json->access_token; 
$me = json_decode(file_get_contents($url)); 

// enter into DB 

connectDb(); 

$q = sprintf("select * from users where google_user_id='%s' limit 1", r($me->id)); 
$rs = mysql_query($q); 
$user = mysql_fetch_assoc($rs); 

if (empty($user)) { 
    $q = sprintf("insert into users (google_user_id, google_email, google_name, google_picture, google_access_token, created, modified) values ('%s','%s','%s','%s','%s',now(),now());", 
     r($me->id), 
     r($me->email), 
     r($me->name), 
     r($me->picture), 
     r($me->access_token)); 
    $rs = mysql_query($q); 
    $q = sprintf("select * from users where id=%d", mysql_insert_id()); 
    $rs = mysql_query($q); 
    $user = mysql_fetch_assoc($rs); 
} 
+0

mysql_real_escape_string() 주위의 래퍼 여야합니다. 대신 PDO를 사용해야합니다. – kapa

+0

스크립트 또는 포함 된 파일의 어딘가에서 함수를 정의한다고 말하고 싶습니다. 그것은 기능에 대해 매우 불량한 이름입니다. – Toto

+0

그것은 내가 추측하는 PHP 함수입니다. 네이티브 함수가 아니므로이 함수의 코드는 어딘가에 있어야합니다. 포함 된 항목을 확인하거나 IDE를 사용하십시오. 또한이 함수는 "htmlspecialchars"또는 같은 패밀리와 같은 일부 기본 PHP functiosn에 만족할 수 있다고 생각합니다. – hornetbzz

답변

2

하는 것은,이 쿼리에 주입 SQL-이스케이프 값으로 사용되고 ... 그래서 내 생각 엔 문자열 이스케이프 함수 중 하나에 대한 단축 별칭으로 정의 된 것입니다. mysql_real_escape_string마다 약간 지루 이름을 입력로서, 예를 들어

function r($s) { 
    return mysql_real_escape_string($s); 
} 

.

이스케이프 처리는 SQL 삽입 공격을 방지합니다. 매개 변수화 된 쿼리는 일반적으로보다 지속 가능한 방법으로 간주되지만 PHP에서는 mysqli 또는 PDO 인터페이스로 변경해야합니다.

+1

고마워, 나는 다른 파일을 놓쳤고 함수 r ($ s) { return mysql_real_escape_string ($ s); } – shin

+0

그래서 그들은 다소 긴 이름의 경우 자체 설명이 가능한 함수를 사용하고 쓸모 없게 짧게 포장했습니다. 끔찍한 코딩 연습. –

+1

기본적으로 예입니다. 나는'echo htmlspecialchars'의 지름길로 종종'h'를 사용한다는 것을 분명히 밝히기 만한다면, 매우 짧은 이름을 가진 함수가 매우 일반적으로 사용되는 것은 비현실적이라고 생각하지 않습니다. 그럼에도 불구하고'r'은 이상한 이름 선택입니다. 하나의 함수를 너무 자주 사용하여 작은 이름을 부여하는 것이 프레임 워크가 자동으로 처리해야하는 잘못된 것이 있다는 신호 일 수 있습니다.이 경우 명확하게 매개 변수화가 더 나은 대답입니다. 'htmlspecialchars'의 경우 기본적으로 이스케이프 처리되지 않는 템플릿 구문에 실패했습니다. – bobince