Home > Archives > 2010-03

2010-03

アボガドチーズバーガー

KUA’AINAのアボガドチーズバーガーうまッッ(≧∀≦)v

Posted via email from kichon’s posterous

PHP タグ無効化

前回はPHPの正規表現としてpreg_match関数を使ってSQLインジェクション対策の方法をやりました。(日本語おかしいかな。。。。)

今回はタグの無効化に関してやりたいと思います。

フォームでのタグの無効化に関して

まずはじめに

問題を顕在化してみます。

sample.html


<form action="hoge.php" method="post">文字列を書き込んでください。
<input type="text" name="a">
<input type="submit" value="送信します">

hoge.php


< ?php     $a = $_POST ("a");     print $a; ?>


上記の2つをどこかのサーバに保存し試してみると、フォームに入れた内容が返ってきます。
このときに<body bgcolor=”black”>をフォームに入れて送ったらどうなるでしょうか?

結果としては黒い画面が表示されます。
これはフォームとして入れたタグをphp側が認識してしまっているためです。
これを回避するためにhtmlspecialcharsという関数を使用します。

んでは、hoge.phpの修正版です。

hoge2.php


<?php
$a = htmlspecialchars($_POST("a"));
?>


postで受け取る部分にhtmlspecialchars関数をかましてあげるだけ。
簡単ですね。

< 参照>
kichon’s blog

PHP正規表現

  • 2010-03-23 (火)
  • PHP

PHPの正規表現に関して

といっても、ちゃんとマニュアルを読んだわけではないです。。。w

正規表現をちゃんとしておかないとSQLインジェクションなどをやられてしまうよねっていう話。

SQLインジェクション

例えば以下みたいなコードがあったとする。

$m = $_POST["hoge"];
mysql_query("delete from fuga where id=$m");

これはこれでいいんだけでも(いや、よくないな。。)、
仮に$mに”1 or 1=1″みたいな文字列を入れるとデータがすべて吹っ飛んでしまう。
(1=1は真になるためすべてのデータが削除対象になる。)

これを防ぐためにフロント側で処理をしてあげる。
そのときにPHPの正規表現を使いました。

preg_match関数

preg_match関数を使って数字以外の文字ははじくようにして見ます。

How to preg_match
書式
preg_match(正規表現, 検索文字列)


xxx-xxxxという郵便番号を検索する。

$post = "123-4567";
if (preg_match("/^[0-9]{3}-[0-9]{4}$/", $post)) {
    print "sucess!!\n";
} else {
    print "miss!!\n";
}
こんな感じです。

数字以外の文字はエラーを出すようにする
最後にpreg_match関数を使って先ほどやったコードにプチSQLインジェクション対策をしてみます。

$m = $_POST["hoge"];
if (preg_match("/[^0-9]", $m)) {
    print "数字以外の文字を入力しないでください!\n";
} else {
    mysql_query("delete from fuga where id=$m");
}

数字以外の文字を入力されたらエラーを返すようにし、
それ以外であればdelete文を実行するようにしています。

正規表現に関してはまったく触れてないですが、、、
こんな感じで。

< 参考>
preg_match関数
正規表現(Perl互換)
kichon’s wiki

PHP変数

  • 2010-03-21 (日)
  • PHP

PHPの変数に関してやりました。

基本的なこと

  1. ドル記号ではじめる
  2. 大文字、小文字がを区別する
  3. リファレンスは使えるのかな

まだ軽くしか読めてない。。

< 参考>
PHP変数

PHPのファイル読み込み

  • 2010-03-21 (日)
  • PHP

PHPで外部からファイルを読み込む方法に関して。

PHPで外部ファイルを読み込む

以下の関数を使う

  • require_one

この関数でファイルを読み込んだ場合、ファイルを一度だけ読み込み、読み込めない場合は処理を中止する。
他にもinclude_onceという関数もあり、これはファイルと一度だけ読み込み、読み込めない場合も処理を続ける。

< 参考>
require_once()
Kichon’s Wiki

Home > Archives > 2010-03

Search
Feeds
Meta

Return to page top