忍者ブログ
[1] [2] [3]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

脆弱性のあるログインフォーム の解説です。ソースコードをまだ見られていない方は、まず、脆弱性のあるログインフォーム をご覧ください。



すでにコメントでほぼ明らかになっていますが、このコードの二つ目の脆弱性は、


<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">


の $_SERVER['PHP_SELF'] をそのまま表示していることです。$_SERVER['PHP_SELF'] は 現在実行しているスクリプトのファイル名ですが、この値には PATH_INFO も含まれます。

例えば、URL に「http://localhost/this.php/%22%3E%3Cscript%3Ealert('xss')%3C/script%3E%3Ca%20name=%22a」と入力すると、この form タグは、


<form method="POST" action="/this.php/"><script>alert('xss')</script><a name="a">


となります。

実際にやってみるとすぐにわかりますが、この時、警告ダイアログがブラウザの画面に表示されます。入力した JavaScript のコードがブラウザで実行されていることがわかります。

これで、ユーザが自由に JavaScript コードをページに埋め込むことができることがわかります。これも、クロスサイトスクリプティング(XSS)脆弱性です。

ログインフォームの脆弱性(3) へ続く。

PR
よくあるメール送信フォームです。 このフォームを使い迷惑メールを送ってみてください。

なお、表示の関係でソースコード中の textarea タグを textarea_ としています。

ログイン済みのユーザのみアクセスできるページの処理です。ログインしているかどうか判定する関数 loggedin() の中身は省略しています。ログインしていないユーザはログインページにリダイレクトします。

このコードのどこが問題でしょうか?

このブログの対象読者を書いていませんでした。

このブログの対象読者は「PHP初心者〜」です。なので、PHP初心者の方も含まれています。初心者からの疑問やコメントなども歓迎します。

脆弱性のあるログインフォーム の解説です。ソースコードをまだ見られていない方は、まず、脆弱性のあるログインフォーム をご覧ください。



すでにコメントでほぼ明らかになっていますが、このコードの脆弱性のひとつは、

ユーザ名: <input type="text" name="username" value="<?php echo $_POST['username']; ?>"><br>


の $_POST['username'] をそのまま表示していることです。$_POST['username'] はユーザが POSTメソッドで送信した usernameフィールドの値ですね。

例えば、ユーザ名に「"><script>alert('xss')</script><a name="a」と入力すると、この inputタグは、

<input type="text" name="username" value=""><script>alert('xss')</script><a name="a">


となります。

実際にやってみるとすぐにわかりますが、この時、警告ダイアログがブラウザの画面に表示されます。入力した JavaScript のコードがブラウザで実行されていることがわかります。

これで、ユーザが自由に JavaScript コードをページに埋め込むことができることがわかります。これは、典型的なクロスサイトスクリプティング(XSS)脆弱性です。

これが何故、危険かわからない人がいましたら、コメントにその旨ご記入ください。

続きは、ログインフォームの脆弱性(2)


忍者ブログ [PR]
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
最新コメント
[02/18 ryu]
[11/21 ぴろ]
[11/07 NONAME]
[11/02 NONAME]
[11/02 NONAME]
最新トラックバック
プロフィール
HN:
Kenji
性別:
非公開
ブログ内検索