PHPで文字を連結するには? . (結合演算子)の使い方

PHPで文字列を繋げるには、繋げたい文字列の間に「 . (ドット)」の1文字をはさみます。PHPでは結合演算子に「 . 」を使います。

参照:文字列演算子(phpマニュアル) 

初めて知った時、これはとても簡単で、素晴らしいと思いました。Excel VBAでも & で簡単に繋がりますが、phpの「 . 」 の1文字で繋げようという発想に感動です。タイピングもしやすいですしね。

PHPで、入力されたデータをhtmlに変換する

PHPのhtmlspecialchars()関数についての記述です。

概要

PHPでユーザーがフォームへ入力したデータを、HTMLに変換するために、htmlspecialchars()関数を利用できます。

利用例

例えば、

$brand = htmlspecialchars($_GET[“brand”]);

とすれば、変数brandにhtml形式でフォームのデータが入ります。

変換とは?

HTMLの特殊な記号を変換します。例えば「>」を「>」に、「&」を「&」に変換します。変換については、htmlspecialchars (php.net) に詳細が掲載されています。

利用した方が良い理由

ユーザーの入力に、勝手なJavaScriptを実行する記述や、HTMLのタグが含まれているとサーバーを危険に晒します。これを避けるため、ユーザーの入力情報はhtml形式に変換した後に利用するのも良さそうです。

例えばフォームから受け取った値を、エスケープせずに画面に出力する危険性についての記述は、PHPの脆弱性への攻撃名称と対策メモ (qiita.com) のクロスサイトスクリプティングの項目から確認できます。

PHPの設定を確認するphpinfo()とは?

phpinfo()関数で、phpの設定情報を確認できます。

下記のコードを適当な名前(例えばphpinfo.php)で保存し、ブラウザでそれを開けば、各種の設定情報が出力されます。

 
phpのバージョン情報のみならず、さまざまな情報が出てきます。私の場合は、MySQLやapacheに関係する情報までもが出力されました。

掲示板のスパム対策

自前で設置している掲示板「Kapokの掲示板」が英語のスパムで荒らされてしまいましたので、いくつかの対策をしました。

実施したスパム対策

いくつかのスパム対策を実施しました。

不適切な文字列を含む投稿を受け付けない

書き込まれたスパム投稿には、薬剤の名前を含むものが多くありました。具体的にはviagra、cialis、levitra等です。

スパム対策として、これらの文字列を含む投稿を受け付けないようにしました。私の掲示板の投稿フォームはphpで動いているのですが、phpで下記のように、本文中にviagraを含む場合はexitして、掲示板のMySQLのデータベースに入れないようにしました。

strposは、引数1の中で引数2が最初に現れる位置を返す関数です。文字列が含まれなければfalseを返します。

参考:strpos関数(php)

複数の入力を必須とする

スパム投稿では意味不明なタグが1つのみついている投稿がすべてでした。

対策として、2つ以上の複数のタグ(半角スペース区切り)の入力を必須としました。

指定の文字列を含む投稿を受け付けないようにした時と同じく、phpのstrpos関数で、半角スペースが含まれる事を必須にしました。

タグの複数指定は、ユーザーの使い勝手を大きく制限するため、一般的には不適切な対策だと思います。ただ、私の掲示板を使っているのはほとんど私1人なので、この対策を取ることにしました。

その他のスパム対策

今回私の掲示板では対策を実施しませんでしたが、他にもスパム対策の方法はいくつかあるようです。

  • urlを変更する
  • キーワードの入力を必須とする
  • 日本語が含まれているかを確認する

対策概要:初心者でもできるスパム対策(spam measures)

今後もスパムが投稿されるようでしたら、これらの対策も実施していこうと思います。