質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • PHP

    21354questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • XSS

    31questions

    XSS【クロスサイトスクリプティング】は、 ソフトウェアのセキュリティホールの一つで、Webサイトに脆弱性が あることからその脆弱性を利用し攻撃する手法です。 主に、入力フォームなどから悪意あるスクリプトを挿入し 該当ページを閲覧したブラウザ上でそのスクリプトを実行します。

$_SERVER["PHP_SELF"]はどのようにXSS攻撃に使われるのか教えてください

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 347

sarah358

score 48

簡単なフォームです

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
  <input type="submit" name="submit" value="submit">
</form>


もしフォームが送信されたら$_SERVER["PHP_SELF"]を表示します。

<?php
if (isset($_POST['submit'])) {
echo $_SERVER["PHP_SELF"];
}


テストとして、
下記のJAVASCRIPTをブラウザーのURLに入力し、フォームが送信してみても、
$_SERVER["PHP_SELF"]は変わりません。

<script>alert('test');</script>


PHPマニュアルを読んでみても、ファイル名はドキュメントルートから取得されるので、
変化はありません。

PHP_SELF'
現在実行しているスクリプトのファイル名です。 ドキュメントルートから取得されます。

どのようにしたら、
$_SERVER["PHP_SELF"]でJAVASCRIPTを実行できるようになるのですか?

※エスケープ処理の勉強をしていて、
この仕組みがわからなかったので、質問しました。
もしブラウザーのURLからファイル名を取得しないなら、
エスケープ処理の意味がないと思いました。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

んーと、こういう事しないからよく知らないんだけどね、

$_SERVER['PHP_SELF']は危険?

このページの例では、mod_rewriteでリダイレクトしてる場合に発生するみたいだね。

普通に考えると、URLとしてPHPコードを特定できなかったらそもそもPHPが実行されないのでAccess Forbiddenあたりになるはずだけど、それを無理やりリダイレクトしてるので問題起きてる感じかな。

個人的にはmod_rewriteで裁くとか変なことしないでRoutsクラスみたいなので裁けよって感じかな…。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/10 20:55

    と、おもったけど
    http://d.hatena.ne.jp/geek-it/20120229/p1
    みると、
    http://localhost/PhpProject1/com.php/hage
    こんなんでもcom.phpにアクセスできるのね。

    まぁ、$_SERVER['PHP_SELF']とか使うようなコード普通にアプリ作ってたら書かないんだけどね。

    キャンセル

  • 2018/06/10 20:55

    勉強になったっていうか、そもそも書かないから使いみちないっていうか…。

    キャンセル

  • 2018/06/10 22:02

    ありがとうございます。html5だと、ACTIONはいらないですね。

    キャンセル

  • 2018/06/10 22:04

    http://d.hatena.ne.jp/geek-it/20120229/p1 が役立ちました。ありがとうございました。

    キャンセル

0

http://www.example.jp/example.php/%22%3E%3Cscript%3Ealert(%27XSS%27);%3C/script%3E/
でアクセスしてみるとすぐ確認できるかと。

$_SERVER["PHP_SELF"]は仕様がイケてないので、使用しないの一択です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/10 22:03

    ありがとうございます。URLにタイプしたらそうなりますが、フォーム送信だと、URLに変化はありません。

    キャンセル

  • 2018/06/10 22:06

    一度ULRをENTERして、そのあと送信したらそうなりそうです。

    キャンセル

  • 2018/06/10 22:26

    URL は、リンク踏ませれば良いって理解してます?
    投稿画面表示した時点で、cookie を送信されてアウトです。

    ちなみに、POST 内容に $_SERVER["PHP_SELF"] は無関係なんだから、多分、試行の方向性が間違ってます。

    キャンセル

  • 2018/06/11 14:28

    コメントありがとうございます。ごめんなさい。今の私の知識ではよくわかりません(笑)
    http://www.example.jp/example.php/%22%3E%3Cscript%3Ealert(%27XSS%27);%3C/script%3E/
    をアクセルすると、私のPCではXSSだということでCHROMEはブロックしてくれます。

    悪質なユーザーは、フォームのURLを誰かに送って、ユーザーがフォーム送信時にアウトになるのではなく(私はそう勘違いしていました)、

    JAVASCRIPTが埋め込まれたURLをおくって、それを開いたら、アウト、ということですね?http://www.example.jp/example.php/%22%3E%3Cscript%3Ealert(%27XSS%27);%3C/script%3E/ 

    混乱したのはACTION=$_SERVER["PHP_SELF"]が問題になっていたので、フォーム送信時の問題かと・・・でもそうじゃなくて、POSTは関係ないということですね。

    キャンセル

  • 2018/06/11 17:44

    概ね正しい理解になったかと。
    echo $_SERVER["PHP_SELF"]
    と、エスケープ無しで $_SERVER["PHP_SELF"] を表示した時点で、XSS の可能性が発生します。

    <a href="/xss_test.php/%22%20onmouseover=%22alert('XSS')%22">LINK</a><br>
    <?php
    echo '<a href="'. $_SERVER['PHP_SELF'] .'">on mouse XSS</a>';
    ?>

    上記だと LINK を踏んだときのみ、アラートが発生します。

    キャンセル

  • 2018/06/11 17:46

    ありがとうございます。よく理解できました。可能ならこちらの回答もベストアンサーにしたいのですが、申し訳ございません。本当に感謝いたします。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    21354questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • XSS

    31questions

    XSS【クロスサイトスクリプティング】は、 ソフトウェアのセキュリティホールの一つで、Webサイトに脆弱性が あることからその脆弱性を利用し攻撃する手法です。 主に、入力フォームなどから悪意あるスクリプトを挿入し 該当ページを閲覧したブラウザ上でそのスクリプトを実行します。