2018/08/08)Webシステムには様々なリスクがあります。安全に利用するためのTipsを紹介します。他の方も普通にこれから紹介する方法を使ってWebシステムにアクセスしている、と思っていたのですがそうでもないようです。これから紹介する方法でリクエストフォージェリやクロスサイトスクリプティングなどのリスクを排除/軽減できます。関連リクエストフォージェリ/クロスサイトスクリプティングとは?ちょうど先日、リクエストフォージェリを再考というエントリを書きました。詳しくはこちらを参照してください。罠Webページを経由するクロスサイトスクリプティングは、罠Webページを経由するクロスサイトリクエストフォージェリの仕組みは同じです。インジェクションされるモノがJavaScriptなのか、コマンド(Webアプリが持つ機能など)なのか、が異るだけです。内部で利用するWebシステム私の開発環境/管理環境もですが、開発環境/管理環境は”インターネットに公開”しているシステムに比べセキュリティ的に甘いモノがあります。内部ネットワークはファイアウォールによって守られているので内部ネットワークのシステムは外部から直接攻撃できません。クロスサイトリクエストフォージェリやクロスサイトスクリプティングによる中継(間接)攻撃は簡単に行えます。開発中のプロトタイプ、テストプログラム、サンプルプログラムや内部ユーザーからしかアクセスを想定せずHTTP認証を使っているモノなどは、インターネットに公開しているシステムに比べると攻撃されるリスクが高いものが多くあります。内部ネットワークなのでリスクを許容する場合も多くあります。この場合、攻撃者が内部ネットワークとシステム構成を知っていれば、外部の罠Webページを経由して攻撃される可能性があります。内部ネットワークのWebサーバーのスキャンはJavaScriptを利用して簡単に外部から行えます。https://github.com/yohgaki/jslanscannerつまり内部ネットワークとはいえ、クロスサイトリクエストフォージェリやクロスサイトスクリプティングのリスクは無視できません。開発環境や管理環境ではリスクがあるプログラムを使用することが多いです。そもそもプロトタイプやテスト/開発用ブログラムなど、公開サイトでは必要なセキュリティも一切考えていないものもあります。リスクの排除/軽減しかし、簡単な方法でリスクを排除/軽減できます。Conquor)を行うだけです。今のブラウザにはユーザープロファイルを切り換え可能なものが一般的に利用されています。管理用Webサイトを閲覧する物などに分離して、それぞれのプロファイルからは用途に限定したサイトのみにアクセスするようにします。ユーザープロファイルを簡単に切り替えれないブラウザの場合はVMを利用すると良いです。VMを利用できない場合、別のユーザーに切り換える機能を利用して使い分けます。ExplorerやSafariは常用せず、テストにしか使わないテスト専用として使っています。プライベートブラウズ機能(Chromeのゲストモード/シークレットモード(シークレットウィンドウ)、IE/EdgeのInPrivateブラウズなど)を利用するのも有用です。SNSやブログ、広告などのリンクをクリックする場合に利用します。近年ではSNSや広告によるマルウェアなどの配布も大幅に増えています。怪しいリンクはクリックしないに越したことはありませんが、プライベートブラウズ機能を活用することである程度リスクを緩和できます。Analyticsを見るとプライベートブラウズ機能を活用されている方は少なくないようです。プライバシー/セキュリティに有用なので使っていない方は是非!まとめ開発/管理用のWebシステムにはリスクが高い物も多くありますが、ここで紹介した方法で使い分ければ問題なく利用できます。注意点はIPアドレスによる制限だとブラウザを使い分けても意味がない※点です。ブラウザを使い分けてもIPアドレスで権限を与えてしまっては、使い分けが機能しません。使い分けているブラウザごとに権限を分割しなければなりません。専用仮想マシンで別IPアドレスを使っている場合はIPアドレスでもOKです。HTTPのBasic認証でも構わないので、ユーザー認証を付けるようにすると安全になります。いちいち認証するのが面倒臭い、という場合はアクセストークンとなるクッキーを保存しそのトークンが含まれないリクエストをWebサーバーレベル(Apacheならmod_rewrite)で全て拒否する、といった方法で防御しても良いでしょう。IE以外にも必要PHP文字列のエスケープ紹介エレクトロニック・サービス・イニシアチブのWebシステムのコンサルタントのブログです。PHPの開発、PHP4.x/5.xレガシーPHPセキュリティパッチサービスなどを行っています。ブログのサブタイトルを「書かない日記」としているのは、ブログを始めた時にあまり書かないつもりで始めたのでこのサブタイトルになっています。yohgaki@ohgaki.net私が記述したブログ中のコードは記載が無い場合はMITライセンスです。その他のコードは参考リンクなどのライセンス情報を参照ください。