[PHP] メールフォームのメールヘッダインジェクション対策

メールフォームのセキュリティについて、メールヘッダインジェクション対策に関する覚え書き。

メールヘッダインジェクションとは

フォーム入力値によって意図しないメール送信を許してしまう脆弱性。フォーム入力値を使ってメールヘッダを生成している場合に起こる。

メールヘッダ・インジェクション脆弱性: ぷ~ろぐ
http://into.cocolog-nifty.com/pulog/2014/01/post-ee98.html

メールヘッダインジェクション対策

メールヘッダの生成にフォーム入力値を使わなければ良い。それができない場合には、メールヘッダ生成に使われるフォーム入力値に改行コードを許さないようにすること。改行コードが含まれていた場合には改行コードを削除する、あるいは処理を中止するなど。

メールヘッダインジェクション | PHPの入門・リファレンス
http://phpcode.jp/c7_mail.php

[PHP] メールフォームのCSRF対策

メールフォームのセキュリティについて、CSRF対策に関する覚え書き。

CSRF (Cross Site Request Forgeries) とは

超簡単に言うと「自サイトのフォームを他サイトからキックされる」こと。これを許すと悪用されるリスクが高まる。CSRFの詳細については以下サイトなど参照。

IPA ISEC セキュア・プログラミング講座:Webアプリケーション編 第4章 セッション対策:リクエスト強要(CSRF)対策
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/301.html

CSRF対策

CSRF対策の基本は、「サーバーがフォームのサブミットを受信したとき、それが自分が生成したフォームからのモノであるかどうかを確認する」こと。具体的には、自分がフォームを生成するときにはトークンを埋め込んでおき、フォームを受信したときにそのトークンが存在するかどうかを確かめればよい。

トークンにはセッションIDが使われることがある。

メールフォームのセッションID(トークン)によるセキュリティ | メサイア・ワークス
http://www.messiahworks.com/archives/2559

しかし、セッションIDの安全性が担保できないという議論もある。

CSRF の安全なトークンの作成方法 | Webセキュリティの小部屋
http://www.websec-room.com/2013/03/05/431

CSRF の安全なトークンの作成方法(PHP編) | Webセキュリティの小部屋
http://www.websec-room.com/2013/03/05/443

擬似乱数によるトークンを使ったサンプルは以下。

PHP – とっても簡単なCSRF対策 – Qiita
http://qiita.com/mpyw/items/8f8989f8575159ce95fc

以下ページにもトークンの安全性に関するコメントがある。

PHPでクロスサイトリクエストフォージェリ(CSRF)対策するときのメモ – Qiita
http://qiita.com/yoh-nak/items/c264d29eb25f4df7f19e

[jQuery] フォームの最初の項目にフォーカスを与える

フォームを埋め込んだページがロードされたときには、フォームの最初の入力項目を自動でフォーカスするようにしておきたい。そうしておくことで、ユーザは入力欄をマウスで選択したりせずに、すぐにキーボードからタイピングを始められる。こういう小さな気配りが、サイトの利便性を向上させるためには重要だよね。

で、これをどうやるかだけど、jQueryのセレクタを以下のように使えば簡単。

ソースは以下参考サイト。

参考サイト

jQueryでページ内に最初に現れるinputタグにフォーカスを当てたい場合(ただし、hiddenタグは除く) – Qiita
http://qiita.com/knt45/items/0ef8c9eb99192a1cb9cd

[jQuery] フォームをバリデーションするプラグイン

こういうものは自前で実装するより、優れた有りモノを使うべきだろうな。ということで検索してみたけど、沢山ありすぎてどれを選べば良いのか迷う。だけど、プロジェクトがGitHubで運用されていれば、開発履歴にざっくり目を通すことで活況を想像することができるかもね。

といった感じで、目先の案件用に選んだプラグインがコレ。

posabsolute/jQuery-Validation-Engine · GitHub
https://github.com/posabsolute/jQuery-Validation-Engine

日本語の紹介記事もあったのでリンク。

jQuery-Validation-Engineで簡単にフォーム内容をチェック! – 北海道苫小牧市のホームページ制作 STUDIO KEY
http://studio-key.com/1139.html

[Webサイト制作] プレースホルダー用画像を提供してくれるウェブサービス

プレースホルダとは

プレースホルダとは|placeholder – 意味/解説/説明/定義 : IT用語辞典
http://e-words.jp/w/%E3%83%97%E3%83%AC%E3%83%BC%E3%82%B9%E3%83%9B%E3%83%AB%E3%83%80.html

プレースホルダとは、実際の内容を後から挿入するために、とりあえず仮に確保した場所のこと。また、そのことを示す標識などのこと。

文書の編集などで、あるページに写真を掲載することは決まっているが、実際の画像データは後で手に入るような場合に、とりあえず四角い空白領域を作り「ここに写真Aを貼る」などとメモを記すことがある。この空白をその写真のプレースホルダであるという。文書やコンテンツの雛形(テンプレート)では、タイトルや文章、画像など個々の要素が入る予定の位置や、その識別名のことをプレースホルダという。

プログラミングでは、式や命令文などの一部にユーザの入力値など実行時に外部から与えられる要素を反映させるような場合に、それが入る予定の場所(や、そのことを示す特殊な記号や識別子など)のことをプレースホルダという。

プレースホルダー用画像を提供してくれるウェブサービス

Placehold.it – Quick and simple image placeholders
http://placehold.it/

無地の画像を表示できる。画像にはサイズも併せて表示される。

lorempixel – placeholder images for every case
http://lorempixel.com/

実際の画像を表示できる。サイズに加えて、人や動物など画像のテーマも選択可能。実際の画像を返してくる分、レスポンスはちょっと遅く感じる。

[PHP] 配列関数range()の使い方

PHPにrange()という関数があるのを知らなかった。使い方によっては forループ同等の挙動をさせたり、文字シーケンスを操作することができそう。

PHP: range – Manual
http://php.net/manual/ja/function.range.php

使用例

[Laravel] モデルファクトリを定義してテストデータを作成する

Seeder内にFakerとループを使ってテストデータの生成処理を書く代わりに、テストデータを作成するモデルファクトリを定義し、Seederからモデルファクトリを利用することでSeedingを行う方法もある。

1. database/factories/ModelFactory.phpにファクトリを定義する

Testing – Laravel – The PHP Framework For Web Artisans
https://laravel.com/docs/5.2/testing#model-factories

2. Seeder内でモデルファクトリを使う

Database: Seeding – Laravel – The PHP Framework For Web Artisans
https://laravel.com/docs/5.2/seeding#using-model-factories

[Laravel] SeedingにFakerライブラリを使う

先日試したFakerというPHPライブラリだけど、Laravelには標準で含まれているらしい。FakerデータをSeedingするのに役立ちそう。

使用例

参考サイト

Generating fake Seeds data with Faker package – Laravel Daily
http://laraveldaily.com/generating-fake-seeds-data-with-faker-package/

[Laravel] Seedingの基本手順

1. Seederを作成する。

/database/seeds/PostTableSeeder.phpが作成される。

2. Seederを実装する。

3. 作成したSeederをDatabaseSeederから呼ぶ。

実行

DatabaseSeederを実行するには

Seederを指定して実行するには

マイグレーションと同時実行するには

参考サイト

Database: Seeding – Laravel – The PHP Framework For Web Artisans
https://laravel.com/docs/5.2/seeding

[PHP] Faker – テストに役立つフェイクなデータを生成するライブラリ

フェイクデータを生成するPHPライブラリ。PHP 5.3.3以降。

fzaninotto/Faker · GitHub
https://github.com/fzaninotto/Faker

インストール

サンプル

アクセサが値を更新するので、下のようにプロパティにアクセスするたびに異なる内容が得られる。

createの引数にja_JPを指定すると日本語のデータが得られる。だけど、プロパティが呼ばれるたびに内容が変わってしまうので、1つの名前を漢字、カナ姓名、カナ姓、カナ名と異なる書式で取得することはできなさそう。