[ホスティング] DropletでSSHキーを使う方法 (DigitalOcean)

以下の手順では、予めアカウントにSSHキーを紐付けしておくことにより、そのアカウントで以降に作成されるDropletに対して、Droplet作成時にSSHキーを簡単に適用することを可能にする。

アカウントに新たに紐付けされたSSHキーは、既存のDropletには適用されないので注意。そういった既存のDropletに対しては、個別にSSHキーを設定しないとダメ。

手順

How To Use SSH Keys with DigitalOcean Droplets | DigitalOcean
https://www.digitalocean.com/community/tutorials/how-to-use-ssh-keys-with-digitalocean-droplets

以下ざっくりと。

1. ローカルで鍵ファイルを生成
TTSSHを使って生成した ([Setup]-[SSH KeyGenerator…]メニュー)

2. DigitalOceanのアカウントにSSHキーを追加
Settings/Security/SSH Keysページで[Add SSH Key]ボタンをクリック
Name = 鍵を識別する適当な名前 (鍵を生成したコンピュータの名前とか)
Public SSH Key = 公開鍵の内容をコピペ
[Create SSH Key]ボタンをクリック

3. Droplet作成時にSSHキーを追加
アカウントに追加されているSSHキーの名前が羅列されるので、有効にするSSHキーをチェック

4. SSHキーを使ってDropletに正しく接続できることを確認

5. SSHデーモンの設定変更
/etc/ssh/sshd_configの編集

6. SSHデーモンに設定適用
# kill -HUP <sshdのプロセスID>

参考サイト

/etc/ssh/sshd_configの設定については以下ページが参考になる。

7 Default OpenSSH Security Options You Should Change in /etc/ssh/sshd_config
http://www.thegeekstuff.com/2011/05/openssh-options/

[PHP] フィルタ関数を使ったメールアドレスのバリデーション

メールアドレスの適正性は正規表現でするものと思っていたけど、PHPのフィルタ関数を使って簡単にできるようになっていたので覚え書き。

PHP: Filter – Manual
http://php.net/manual/ja/book.filter.php

filter 拡張モジュールは PHP 5.2.0 以降デフォルトで有効となります。 それより前のバージョンでは実験的な PECL 拡張モジュールを使用していましたが、 PECL 版は今後非推奨となり、更新もされません。

以下、使用例。

PHPで各種バリデーション – Qiita
http://qiita.com/mpyw/items/346f1789ad0e1b969ebc

そろそろメールアドレスを正規表現だけでチェックするのは終わりにしませんか? – Qiita
http://qiita.com/ShibuyaKosuke/items/0b9a8fddaefb2060a14a

[PHP] メールフォームの連続投稿を禁止する

とりあえず二案。

  1. 投稿時刻と投稿者IPをサーバー側で記録しておき、以後の投稿時に比較する。
    確実な方法だけど実装の手間はある。
  2. 投稿時に有効期限月クッキーを生成し、以後の投稿時にクッキーが存在するかチェックする。
    簡易的な方法だけど手軽。ブラウザでクッキーが無効になっていると使えない。

あと、フォームのボタンが2度押しできないようにJavaScriptなどを使って抑制しておくと良い。

[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