LoginSignup
7
5

More than 5 years have passed since last update.

PHPのPOSTのキー名に半角スペースを使うとアンダースコアに置換される

Last updated at Posted at 2015-07-27

はじめに

  • PHPHTMLの最低限の知識を持っている人対象です。
  • POSTの仕組み自体を説明するものではありません。

サンプルコード

index.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
    </head>

    <body>
        <form method="post" action='post_sample.php'>
            <input type='text' name='sample' value='sample'><br>
            <input type='text' name='全角文字' value='全角文字'><br>
            <input type='text' name='sample plus space' value='sample plus space'><br>
            <input type='text' name='sample.php' value='sample.php'><br>
            <input type='text' name='sample1[test]' value='sample1[test]'><br>
            <input type='text' name='sample2[test' value='sample2[test'><br>
            <input type='text' name='sample3test]' value='sample3test]'><br>
            <input type='submit'>
        </form>
    </body>
</html>
post_sample.php
<?php
echo('<pre>');
var_dump($_POST);
echo('</pre>');

結果

スクリーンショット 2015-07-28 0.09.41.png

上記結果からポストのキー名に指定した「半角スペース」「ピリオド」「単独開きブラケット」は内部的にアンダースコアに変換されるようです。
PHPの公式サイトにもアンダースコアに置換される旨の記載があることから、PHP公式の仕様のようです。
知らなかったので備忘録と共有の意味を込めて記事にしました。

参考

http://jp2.php.net/manual/ja/language.variables.external.php

おわりに

今回この件を調べたのは、ポストされてきたキー値をそのままSQLのカラム名指定に使用しようとしていて「あれ?これってインジェクションできるのかな?」と思いポストのキー値にdrop table等を仕込んで攻撃してみようとしたという背景からでした。結果として半角スペースがアンダースコアに変換されてしまうので攻撃できませんでしたが、安全のために別の手段に置換することにしました。
好奇心って大事ですね:smile:
どうでもいいですが、前回の記事の最後に「次回はRails編を書きます」と言いましたが別内容になってしまいました。
Rails編はその内書きます。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5