jQuery・Javascript jQueryを使った小技やAjax非同期通信などについて

非同期通信+SQLなどのセキュリティ対策

2015年5月29日
この記事は掲載から875日経過しています。
情報が古い可能性が有りますのでご了承下さい

昔はページをいちいち読み込んで処理していたものを、最近はノンリロードで処理するケースが多くなっています。例えば郵便番号から住所を取得したり、条件にマッチしたデータを表示したりなど。

こういうときはjQueryの非同期通信などがとても役に立つのですが、知れば知るほど「危険じゃね?」と思ってしまうものです。javascriptに非同期通信先のファイル名を書く訳ですから、そのファイルへ直接的にアクセス出来ます。

例えばこんなページ

何か入力してボタンを押すと、PHPと通信して現在時刻を足してキックバックしてきます。

例えば、http://studio-key.com/Sample2/jquery/security/query.php は普通にブラウザから見る事が出来ます(Error)と表示されますが。なので、このファイルにSQL処理なんて書きたくはないわけです。

これがPHP同士の処理であれば.htaccessで拒否ってしまう手もあるのですが、非同期通信って普通のHTTP(SSL)通信なので拒否る訳にはいかず、色々と仕込みます。

ページを読み込んだ時にユニークな値をsessionに記録する

これは簡単にIPとHOST情報をハッシュ化してますが、ここにシステムごとのユニークな乱数をくっつけたりなどすると更に良いと思います。

非同期通信するquery.php側でその値と検証する

このファイルは値を受け取り、処理ファイルsql/sql.phpへ渡し、キックバックを受け取るだけの処理を行うものにします。また、sql/ディレクトリには.htacessでアクセス制限を掛けておきます。

ファイル構造はこんな感じ。ちなみにsql.phpは入力値に日時をくっつけてキックバックしてるだけで、SQL処理はしていません。
file

こうすると、index.phpで発行するユニークな値が無いと、query.phpにアタックを掛けてもエラーになり余計な情報を吐き出しません。しかし、それすら通り抜ける事も出来なくは無いので、index.phpへアクセスする場合は、指定されたページを経由させ、リファラを検証するとかも有効かも。でもリファラって偽装が可能で。

なので、query.phpで更にユニークを発行したり、更に経由ファイルを増やすなど、色々とやります。

非同期通信って手軽で便利だけど怖いよねってお話でした。

  • このエントリーをはてなブックマークに追加
  • LINEで送る

このカテゴリーのその他の記事

PAGE TOP