2012-04-21 3 views
1

次のコードはgoogle api accessの一部です。 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

それがコードに存在しないのですように、1つは確認することができない一方で、それはクエリに注入SQLエスケープ値に使われている...ので、私の推測文字列エスケープ関数の1つのショートカットエイリアスとして定義されているということです。例:

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

名前を入力すると、毎回少し退屈になる名前mysql_real_escape_stringが入力されます。

エスケープすると、SQLインジェクション攻撃が防止されます。パラメータ化されたクエリは、一般的にそれに取り組むためのより持続可能な方法と考えられますが、PHPではmysqliまたはPDOインタフェースに変更することを意味します。

+1

ありがとう、私は別のファイルが見つかりませんでした。関数r($ s){ return mysql_real_escape_string($ s);が見つかりました。 } – shin

+0

だから、ちょっと長い名前の場合は自明の機能を持っていて、役に立たないように短いもので包み込んだだけですか?ひどいコーディング練習。 –

+1

本質的にはい。そのような短い名前を持つことが非常に一般的に使用される関数にとっては、それが明確になるように文書化されている限り、私はしばしば 'h'を' echo htmlspecialchars'のショートカットとして使用するのは間違いありません。それにもかかわらず、 'r'は奇妙な名前の選択です。ある関数を頻繁に使用して小さな名前を付けるのは、おそらく、フレームワークが自動的に処理する必要があるということが間違っているという印です。この場合、パラメータ化が明確な方がよいでしょう。 'htmlspecialchars'の場合、デフォルトではエスケープされていないテンプレート構文には失敗しています。 – bobince

関連する問題