クロスサイトスクリプティングはアプリケーションを狙った攻撃の一つです。
クロスサイトスクリプティング、略してXSSと呼ばれることが多いです。
こんな感じのフォームを作って、フォームから受け取った内容を
ページに表示したい場合がありますよね。

たとえばこの中に「ほげほげ」と入力して送信すると
次のページで「ほげほげさんいらっしゃい!!」と表示される場合を
考えてみましょう。
やり方としては、フォームから受け取った内容を変数にして
その内容をアウトプットするという方法だと思います。
入力欄に書きこむときにたいていの人は普通の
文章を打ち込むと思うのですが、やろうと思えば
HTMLタグやスクリプトを書き込むことも
可能です。
フォームから受け取った内容を表示する前に
チェックをかけておかないと、HTMLタグやスクリプトもそのまま
表示されてしまいます。
たとえば
<a href="http://xxx.○○○/dangersite.php">オススメサイト</a>へ
と打ち込んでみましょう。
すると下の絵のような感じで出力されます。

そのままリンクとしてクリック出来るようになっています。
これを利用して、
ウィルスをばらまいているような危険なサイトへ
誘導するページが作られてしまいます。
http://xxx.○○○/dangersite.phpがデンジャラスなページだった場合、
ホームページに遊びにきたお客さんが気付かずにこのリンクを踏んでしまうと…。
クロスサイトスクリプティングはその名前のとおり、
スクリプトを使って、脆弱性のあるサイトを踏み台にして攻撃する方法なんですね。
次はその対策法を解説します。
今週中あたりには出来上がる予定ですので
楽しみに待っていてくださいね!!
PDO機能を使ってMySQLデータベースにアクセスしようとしたのですが、
こんなメッセージが出現してエラーになってしまいました。
原因はパスワードなどを書いたiniファイルが間違っていたことです。
あと、PDOはPEARパッケージがサーバーに入っていないと使えません。
PEARはPHPをパワーアップさせるパッケージです。ちなみにこれは有志の方が開発してるフリーソースなので
無料でゲットすることができます。
早速、エラーをやっつけましょう!!
Step01 PEARを入手
さくらインターネット
でPDOを使いたい場合は
PEARをインストールする必要があります。
こちらを参考にまずはPearをゲットします。
◆さくらでpearインストール覚書
PEARをインストールしたら、
phpinfo()
を書きこんだPHPファイルを作って
そのファイルをブラウザで開きます。
PDOという項目があるので確認してください。
PDO support:enabled
PDO drivers:sqlite, mysql, sqlite2
となっていればPDOが使えます。
Step02 MySQL接続文をチェック
MySQLを呼び出すPHPファイルに
$mcon = new PDO ('mysql:host=ホスト名;dbname=データベース名','ユーザー名','パスワード');
を記述します。
この部分が間違っていると接続できません。
接続に失敗するとエラーメッセージが表示されます。
エラーメッセージ:
Access denied for user
(このユーザーでは接続できません→ユーザー名にエラーがある)
Unknown MySQL server host
(こんなデーターベースはありません→データーベース名がエラーがある)
Error: Can't connect to local MySQL server through socket '
(このソケットでは接続できません)
などが表示される場合は
ホスト名・データベース名・ユーザー名・パスワード
が間違っていることがあります。
間違っていない場合は、
()内に半角スペースが含まれていないか
チェックしてみてください。
ホスト名・データベース名・ユーザー名・パスワードが
すべて正しくても半角スペースなどが入っていると
エラーの原因になるようです。
おまけ
私は2日間悩みました。解決してよかった!!
半角スペースでドツボにはまりました。
PHPなどのプログラムを使ってホームページを作っている場合
クロスサイトスクリプティング攻撃の対策をしておく必要が
あります。
クロスサイトの心配があるかどうかを調べることが
出来るフリーソフトが「Pixy」です。
01 さっそく使ってみよう!!
Pixyはネット上で使えるソフトです。
サイトにアクセスして、テキスト入力欄にコードを入力します。
◆Pixy
コードを貼り付けたら、
「Analyze XSS!」ボタンを押します。
しばらくすると、結果を表示してくれます。
危険な個所は赤文字になります。
赤くなってしまった部分はエスケープを忘れている
可能性があるのでチェックしてみましょう。
おまけ:
ダウンロード版もあるみたいですが
CUIプログラムの使い方がいまいちよくわからなかったです…。
Pixyは大学の研究室が提供しているようです。
Adminがあるととっても便利ですが、
いっきに多くのデーターを編集したいときは
やっぱりExcellの方がいろいろと編集しやすいです。
そこで、データベースの内容をエクセルに落とし込めるように
したいと思います。
Step01 SQLからエクスポートする
MyAdminを利用
上にあるタブの中から「エクスポート」を選択します。
形式:「CSVデータ」
エンコード:「SJIS」
ファイルに保存にチェックします。エクセルは
シフトJISでないと文字化けしてしまします。
次に、「実行する」ボタンをクリックします。
これでCSVデータが取り出せます。
Step02 エクセルにインポートする
次は、先ほど作ったCSVデータをエクセルに取り込みます。
普通にダブルクリックして開くと、「”」だらけの
わけのわからないデータになってしまうので
インポートを使って取り込みます。
エクセルを開いて、
「データ」タブを開き
「テキストファイル」をクリックします。
設定画面が出てくるので
MySQLの場合は
「カンマやタブなどの区切り文字によって.....」
のラジオボタンにチェックを入れます。
次へ進んで、区切り文字は
「セミコロン」を選択します。
あとは「完了」をクリックするだけです。
その次の項目は
「OK」を押せば
でインポート完了です。
おまけ
逆のエクセル→MySQLは直接PHPAdmin側でのインポートしようとしたのですが
全く上手くいきませんでした…。
原因はたぶん改行コードがウィンドウズとユニックスで違うからなんだと思います。
インポートはあきらめてSQL文を作って実行させることにしました。
エクセルで編集したデータをCSVで保存し
メモ帳の置換機能を使ってSQL文を作成。
あとはAdminでそれを実行させれば、エクセルからSQLへのデータ受け渡しも
なんとかうまくできました。
さくらインターネット
に入っているPHPAdminを使っています。
プログラムを使うと手動で変更しなくても
毎日日付を表示してくれたり、
お客さんのリクエストに合わせて
ページを表示するなど高機能なホームページが作れます。
さらにデータベースと組み合わせると検索サイトや
お買いものカート機能などさまざまなアプリケーションが作れます。
とっても便利なPHPとMySQLですが、
使っていてどうしてもうまくいかないことってありますよね。
なかなか思い通りに動いてくれないと焦ってしまいます。
私自身がドツボにはまってしまった
事項を中心に、お悩み解決策を書いていきたいと思います。
アプリケーション制作の「こうしたい!!」のヒントになれるページ
にできたらと思います。