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);
}
4

1 に答える 1

2

コードに存在しないため確実ではありませんが、クエリに挿入された SQL エスケープ値に使用されているため、文字列エスケープ関数の 1 つのショートカット エイリアスとして定義されていると推測されます。 . 例えば

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

mysql_real_escape_string毎回名前を入力するのは少し退屈です。

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

于 2012-04-21T09:58:38.387 に答える