PHPからtwitteroauth(Twitter API)を使う場合の、コードを改良

Twitter APIの簡単な始め方 (PHPから)」で書いたコードはセキュリティ上、問題があるので改良する。

これは、上の話の続編だから、上の話を読んでから、下を読んでください。

問題点

下のコードは、「Twitter APIの簡単な始め方 (PHPから)」で書いた。

<?php

///////////////////////////////////////
//
//    twitteroauth
//
///////////////////////////////////////

// オートローダーを起動
require_once( './vendor/autoload.php' );

// キーの設定
$cKey      = "aaa"; // Consumer Key (API Key)
$cSecret   = "aaa"; // Consumer Secret (API Secret)
$aToken    = "aaa"; // Access Token
$aSecret   = "aaa"; // Access Token Secret

// 接続
$connection = new Abraham\TwitterOAuth\TwitterOAuth( $cKey, $cSecret, $aToken, $aSecret );

// フォロワーのIDを取得してみる
echo '<pre>';
var_dump( $connection->get( 'followers/ids' ) );
echo '</pre>';

上記コードは動くが、「キーが丸見え」という問題があるので、ここで改良する。

具体的には、twitteroauthを使う全てのファイルに、このキーを書くと、保守性や機密性に問題がある。 どこか1カ所に、まとめたい。

やること

上のコードは、下のフォルダ構成の「test.php」に書くコードや。

「test.php」が「vendor」フォルダ内のファイルにアクセスした。

「test.php」にキーが全部書かれている。

│
│  test.php
│
└─vendor
    │
    │  autoload.php
    │
    ├─abraham
    │  └─twitteroauth
    │
    └─composer

これを、下のように修正。

まず、「test.php」と「vendor」フォルダの間に、 「lib」というフォルダを作る。

この「lib」の中に、新しく「api.php」というファイルを作って、ここにキーをまとめてみる。

│
│  test.php
│
└─lib
    │
    │  api.php  (← このファイルにキーを書く)
    │
    │  .htaccess  (← このディレクトリ以降、ブラウザからのアクセスを禁じる)
    │
    └─vendor
        │
        │  autoload.php
        │
        ├─abraham
        │  └─twitteroauth
        │
        └─composer

「api.php」に書くコードは下。

変数に格納すると、間違ってecho $cKey;とかやると、そのまま表示されるので、使わない。

キーをそのまま使って $connection を取得する。

<?php

    // 接続
    $connection = new Abraham\TwitterOAuth\TwitterOAuth(
                "aaa"       // Consumer Key (API Key)
            ,   "aaa"       // Consumer Secret (API Secret)
            ,   "aaa"       // Access Token
            ,   "aaa"       // Access Token Secret
    );

「test.php」は下のように変える。

<?php

    // STEP 1 - オートローダーを起動
    require_once( './lib/vendor/autoload.php' );

    // STEP 2 - $connection を取得
    require_once( './lib/api.php' );

    // STEP 3 - フォロワーのIDを取得してみる
    echo '<pre>';
    var_dump( $connection->get( 'followers/ids' ) );
    echo '</pre>';

「api.php」はSTEP 2で読み込んでいる。

「api.php」の読み込みが終わると、$connection がそのまま使えるようになるので、 STEP 3でデータを取得している。

なお、STEP 1でオートローダーを起動をしているが、これは「api.php」の中に書くことも可能。 ただし、その時に、STEP 1で読み込むためのパスは、起動元(今の場合、test.php)からの相対パスになる。

まー、ややこしくなる可能性が高いので、今の場合、test.phpに書いた方が良い。

ついでに、こういう風にキーやパスワードを分離した場合、ブラウザからアクセスできないようにしといた方が良い。

具体的には、「lib」フォルダの中に、「.htaccess」というテキストファイルを作る。

その中に、以下のように書いておけば、ブラウザからアクセス不可になる。

Order deny,allow
Deny from all

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA