P72~96 同一オリジンポリシー
能動的攻撃
悪人がサーバーを直接攻撃すること
代表例:SQLインジェクション
受動的攻撃
ウェブサイトに悪質なリンクを仕込んでおいて、それをクリックしたユーザーをマルウェア等に感染させること
代表例:
①FTPのパスワードを不正入手してコンテンツを書き換える
②SQLインジェクションによりコンテンツを書き換える
③利用者が投稿できるサイト(SNSなど)のクロスサイト・スクリプティング(XSS)脆弱性を狙う
受動的攻撃の防ぎかた
Javascriptには、子どもが砂場で好きなだけ騒いでも外部に迷惑を及ぼさないことからの連想で「サンドボックス」という考え方があります
プログラムができることに次のような制約をもうけています
・ローカルファイルへのアクセスの禁止
・クライアントスクリプトからサイトをまたがったアクセスを禁止(ネットワークアクセスの制限)(同一オリジンポリシー)
32-002.html
<body>
<form name="form1">
<input type="text" name="passwd" value="password1" />
</form>
</body>
32-001.html
<iframe name="iframe1" src="http://xxx.com/32-002.html"></iframe>
<input type="button" onclick="go()" value="表示する"/>
<span id="out"></span>
<script>
function go() {
var x = iframe1.document.form1.passwd.value;
document.getElementById('out').textContent = x;
}
</script>
ボタンを押すことでiframeの内側のコンテンツをJavascriptにより取得できます
これを利用した攻撃があります
悪人がtrap.example.comをつくり、iframeでexample.com(正規サイト)を表示させます
何も知らないユーザーがtrap.example.comを閲覧したとき、example.comにログイン中であれば、trap.example.comのiframe内にユーザーの個人情報が表示されます
悪人はJavascriptを使ってiframeの中身を取得することができます
コレを防ぐのが同一オリジンポリシーであり、罠サイトからIframeの内容を取得しようとすると「Permission Denied」というエラーが発生します
XSS
Iframeの外からJavascriptを使ってIframe内の情報を取得しようとすると同一オリジンポリシーによりエラーが発生するので、なんらかの手法により、Iframeの内側にJavascriptを送り込んで実行させればえらーになりません
これがXSS(クロスサイト・スクリプティング)です
クロスドメインアクセス
Javascriptはクロスドメインにアクセスできませんが、「Img要素のsrc属性」や「scriptの読み込み」、「CSSの読み込み」、「form要素のaction属性」では他のドメインのものにアクセスすることができます
form要素のaction属性に異なるドメインを指定することで、ユーザーの意図しないformを送信させる攻撃がCSRF(クロスサイト・リクエストフォージェリ)です
CORS(Cross-Origin Resource Sharing)
どうしても異なるドメイン間で情報(リソース)をシェアしたいという要望で作られたのがCORSという仕組みです
同一オリジンポリシーによるエラーを回避することができます
BACK