各種システム開発・WEBコンテンツ制作・WEBデザイン・ホームページ制作・インフラ設計・構築・レンタルサーバー・ソフトウェア技術者のアウトソーシング事業を行っております。

10 月
31

Seleniumで常時SSL化対応のテストを省力化

技術スタッフ


昨年、Googleが検索結果での順位に、SSL化されているWebサイトを優先するロジックを実装したとの発表を受け、既存サイトをSSL化する案件が身の回りでも増えてきています。

プログラマーとしての仕事ですと、各Webページで読み込んでいる、画像、Javascriptファイル、css、FormのActionなどを、httpからhttpsとして読み込むようにするか、httpを削除し、どちらの通信にも対応可能なプロトコルレラティブ化を行います。

 

この修正の漏れがあると

 

このような警告が出てしまいます。

 

20,30ページ程度のサイトであれば、手作業で地道にする方が早いですが、大規模なサイトですと1ページ1ページ手作業で該当箇所の発見→修正→確認→修正と対応するのは、大変な時間と工数がかかってしまいます。

 

これを省略可するために、Selenium+Google Chromeを使用しています。

Selemiumについてはこちらから:本家サイトhttp://www.seleniumhq.org/

 

GoogleCromeの開発者ツールでは、httpsでアクセスした際にhttp通信の画像等がある場合

のような警告をコンソールに出力します。

Selenuimでサイト全ページを自動巡回させて、警告が出たページを修正します。

 

事前準備ですが・・・結構あります!

・Java:Seleniumサーバーを実行させるために必要です

・PHP:自動巡回プログラムをPHPで組みます

・composer:SeleniumをPHPコードで動作させるドライバを、これで取得します

・Google Chrome:今回の自動巡回に使用するブラウザ

・IDEもしくはエディタ:あると便利です。

・Selenium Server:セレニウムを自PCで動作させるサーバー

・ChromeDriver – WebDriver for Chrome:SeleniumからChromeを動作させるために使用

・selenium php-webdriver:phpでSeleniumを動作させるために使用

 

PHPやJavaのインストールは省略します。

 

selenium環境の構築についてですが、まずは、Seleniumサーバーについてです。

配置は以下のようにします。

Selenuimサーバー起動についてですが、サーバーファイルを配置したディレクトリに移動し

> java -jar selenium-server-standalone-3.0.0-beta4.jar

とコマンドを入力します。

このウインドウは閉じてしまうと、Seleniumサーバーが終了してしまうので放置します。

 

次に、selenium php-webdriverをインストールします。

まずは、テストコードを置くディレクトリを作成しましょう。

私はEclipse派ですので、プロジェクトを作成します。

そして、このプロジェクトにselenium php-webdriverを追加します。

準備はこんなものです。

早速、コードを書いてみましょう。

——————–

<?php

require ‘./vendor/autoload.php’;

require ‘./facebook/webdriver/lib/Remote/DesiredCapabilities.php’;

$host = ‘http://localhost:4444/wd/hub’;

putenv(“webdriver.chrome.driver=chromedriver”);

 

$chrome = Facebook\WebDriver\Remote\DesiredCapabilities::chrome();

$chromeoptions = new \Facebook\WebDriver\Chrome\ChromeOptions();

$chrome->setCapability(\Facebook\WebDriver\Chrome\ChromeOptions::CAPABILITY, $chromeoptions);

$webdriver = Facebook\WebDriver\Remote\RemoteWebDriver::create($host, $chrome);

 

//テストするURLのリスト

$url_list = array(

“https://mrp-net.co.jp/”

,”https://mrp-net.co.jp/partner/”

,”https://mrp-net.co.jp/contact/”

);

 

foreach ( $url_list as $url ) {

 

echo $url .”解析開始———————–“. PHP_EOL;

$webdriver->get ( $url );

$devlogs = $webdriver->manage ()->getLog ( ‘browser’ );

 

//取得したログを1行ずつ解析

foreach ( $devlogs as $devlog ) {

$message = $devlog [‘message’];

 

//httpsでアクセスした際に、httpのコンテンツが混じっていると

//Mixed Content として警告が出力される。

if (preg_match ( ‘/.*Mixed Content.*/’, $message )) {

 

// 画像がhttpsではない場合

if (preg_match ( ‘/.*insecure image.*/’, $message )) {

$log = preg_split ( “/insecure\simage\s\’/”, $message );

$log = preg_split ( “/\’\./”, $log [1] );

echo “画像データ:” . $log [0] . “\n”;

}

// formのActionがhttpsじゃない場合

elseif (preg_match ( ‘/.*contains a form.*/’, $message )) {

$log = preg_split ( “/endpoint \’/”, $message );

$log = preg_split ( “/\’\./”, $log [1] );

echo “FormのAction:” . $log [0] . “\n”;

} else {

echo $message . PHP_EOL;

}

}

}

echo PHP_EOL;

}

echo “解析終了———————–“. PHP_EOL;

$webdriver->close();

——————–

みなさんの環境でも、URLのリストを変更すれば、そのまま使えるかと思います。

今回はテストとして、当社MRPのコーポレートサイトを3ページチェックするプログラムとなっています。

当社コーポレートサイトでは、お問合せ、採用の応募、パートナー募集ページのみのSSL対応となっていますので、TOPページのhttps://mrp-net.co.jp/は警告が検出され、他のページでは検出されないはずです。

 

早速、実行します。

このように、どのページのどこの画像がhttpのままになっているかを、ログで確認することができました。

SSL対応を行った、お問合せページ、パートナー募集ページでは、警告はありません。

 

URLリストを自動生成できるように変更すれば、大規模サイトの対応時にも大幅に工数が削減できます。

常時SSL化は常識化される流れもありますので、今後、こういうテストツールがもっと活躍していくかと思います。


コメントを残す

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

*

月別アーカイブ

カテゴリ