はじめに
-
PHP
とHTML
の最低限の知識を持っている人対象です。 -
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>');
結果
上記結果からポストのキー名に指定した「半角スペース」「ピリオド」「単独開きブラケット」は内部的にアンダースコアに変換されるようです。
PHP
の公式サイトにもアンダースコアに置換される旨の記載があることから、PHP
公式の仕様のようです。
知らなかったので備忘録と共有の意味を込めて記事にしました。
参考
http://jp2.php.net/manual/ja/language.variables.external.php
おわりに
今回この件を調べたのは、ポストされてきたキー値をそのままSQL
のカラム名指定に使用しようとしていて「あれ?これってインジェクションできるのかな?」と思いポストのキー値にdrop table
等を仕込んで攻撃してみようとしたという背景からでした。結果として半角スペースがアンダースコアに変換されてしまうので攻撃できませんでしたが、安全のために別の手段に置換することにしました。
好奇心って大事ですね
どうでもいいですが、前回の記事の最後に「次回はRails
編を書きます」と言いましたが別内容になってしまいました。
Rails
編はその内書きます。