X

PHP Security

フィルター/デコード時のセキュリティ対策の鉄則

ブラックリスト型(サニタイズ型)のセキュリティ対策クイズ 解答編 ではバリデーション時の注意点をまとめに書きました。 ホワイトリスト型のバリデーションを行う場合でも以下の項目に注意しなければなりません。 特殊な意味を持つ文字を許可する場合、細心の注意を払う そもそも特殊な意味を持つ文字は許可しない方が良い 絶対の自信が無いのであれば、特殊な意味を持…

ブラックリスト型(サニタイズ型)のセキュリティ対策クイズ 解答編

昨日のエントリのクイズです。今回はその解答です。 ブラックリスト型のセキュリティ対策は、どうしても仕方がない限り使ってはなりません。以下のサニタイズコードは "../" 、".." を無効な文字列として取り除きます。このサニタイズコードを回避しカレントディレクトリよりも上の階層からのパスへアクセスするパストラバーサルを行う文字列を考えてみて下さい。(/etc…

PHPスクリプトアップロード対策

今日はWordPressの脆弱性を例にスクリプトアップロード対策を紹介します。ファイルアップロードをサポートしているシステムの場合、PHPスクリプトとして実行されてしまう拡張子を持つファイルをアップロードされてしまうとサーバーを乗っ取られてしまいます。

APIとエスケープ/バリデーションとセキュリティ

今回はセキュリティ対策におけるAPIとエスケープ/バリデーションをどう考えるかの話です。

SQLのエスケープ

SQLにエスケープなんて必要ないと考えている方も居るとは思いますが、現実にはエスケープを知っておくことは必須と言っても構わないと思います。 既にSQL識別子のエスケープについては書きましたが、今回はSQLエスケープというよりは安全にSQLデータベース利用する話です。先ずはエスケープの話を全て終わらせよう、と思っているのですがSQLエスケープのエントリが無いの…

PHPのJSONのエスケープ

追記:最近のOWASPガイドの更新でJavaScript文字列はUnicodeエンコードで安全性を確保するよう変更されました。元々このブログでもUnicodeエスケープのまま利用するように書いています。他の言語のユーザーはUnicodeエスケープを利用しましょう。PHPもASCII領域の文字をUnicodeエスケープするようにした方が良いと思います。これは提…

PHPの比較とBOOL/NULL型の話

先日、10年以上勘違いをしていたことがPHPの開発者MLで議論して発覚したので、その大恥を披露します。 PHPの比較とBOOL/NULL型の話です。 (さらに…)

PHPのスクリプトを色々な環境で試すサービス

PHPで開発したり、記事を執筆する時には色々な環境で試したい場合があります。自分の環境で試すのも良いですが、Webサイトにコピー&ペーストで試せると便利です。あまり知られていない(?)ようなので紹介します。 (さらに…)

Webアプリの入力はバリデーションできない、という誤解

Webアプリの入力はバリデーションできない、と誤解している方は少なく無いようです。システム開発に関わる人でなければ誤解していても構わないのですが、システム開発者が誤解していると安全なシステムを作ることは難しいでしょう。 Webアプリの入力はバリデーションできない、と誤解している開発者にも理解できるよう噛み砕いて解説してみます。 (さらに…)

JavaScript文字列のエスケープを回避する方法

JavaScriptの文字列をエスケープのエントリでJavaScript文字列をエスケープ後に直接出力するより、DOMから取得してはどうか?という提案があったのでエントリを作成しました。 (さらに…)