Security
Jeans & Development | 電子ブロック工房 | 三日坊主 | フロントページ |
文字コードの問題 [Security]
2009年11月3日
またまた、スクラッチから構築中。以前考えていた(そしてコードを挿入していた)さまざまな機能をとりあえず削除し、必要最低限のコードでどこまでできるかを考えている。かなりコードがすっきりしそう。例えば、新しい考え方では、コード中でのスキンとテンプレートの区別がまったく存在しない等(ただし、概念上の違いは存在)。
サポートする文字コードは、UTF-8のみにすることにした。これも、コードの簡潔化のため。その他、さまざまな規約を設けることで、簡潔なコードでの完成を目指す。今月は、Jeans月間かな?
で、表題の件。文字コードの問題は主に、XSS対策でのこと。2つ考え方があって、ひとつはJeansに入力される文字列をチェックする方法。もう一つは、出力するときにチェックする方法。
サポートする文字コードは、UTF-8のみにすることにした。これも、コードの簡潔化のため。その他、さまざまな規約を設けることで、簡潔なコードでの完成を目指す。今月は、Jeans月間かな?
で、表題の件。文字コードの問題は主に、XSS対策でのこと。2つ考え方があって、ひとつはJeansに入力される文字列をチェックする方法。もう一つは、出力するときにチェックする方法。
restriction::restrictHtmlTags()メソッド [Security]
2008年7月27日
先日取り上げた複数ユーザで使用時のアイテムパースでの脆弱性の回避について、結論が出せた。
やはり、ホワイトリストで対処するのが一番確実なやり方なので、利用可能なタグをホワイトリストで用意し、それに該当しないものはずべてhtmlspecialchars()互換の方法で無効化することにした。
やはり、ホワイトリストで対処するのが一番確実なやり方なので、利用可能なタグをホワイトリストで用意し、それに該当しないものはずべてhtmlspecialchars()互換の方法で無効化することにした。
itemをevalするのはまずいかも [Security]
2008年6月25日
久々の更新。
先日、とあるPHPの本を読んで知ったのだが、HTMLへのPHPコードの挿入は、<?php ... ?>以外に、<script language="php">...</script>でもできる。PHP5でもこれを確認した(PHP6ではどうだか知らない)。
現在のバージョンでは、それぞれのアイテムのパースにもevalを使っている。admin以外でのPHPコードの実行を回避するために、『<?』を『<?』に変換しているが、これだけでは穴があるということになる。
先日、とあるPHPの本を読んで知ったのだが、HTMLへのPHPコードの挿入は、<?php ... ?>以外に、<script language="php">...</script>でもできる。PHP5でもこれを確認した(PHP6ではどうだか知らない)。
現在のバージョンでは、それぞれのアイテムのパースにもevalを使っている。admin以外でのPHPコードの実行を回避するために、『<?』を『<?』に変換しているが、これだけでは穴があるということになる。
セキュリティメモ [Security]
2008年5月14日
現在、Jeansの開発はすこしお休み中。気分転換にoyagameを作っていて、そちらが出来ればまたJeansに戻る予定。Jeansの開発を続けていて、これは今までやって来たプログラミングの中で、最も大変なプロジェクトだと気がついた。あせらず、ゆっくりやりたい。
さて、Jeansの骨格部分はあらかた仕上がっているので、ここでもう一度セキュリティーをチェックするため、『PHPサイバーテロの技法』を読んで、問題(になるかも知れない)部分をピックアップしてみた。
さて、Jeansの骨格部分はあらかた仕上がっているので、ここでもう一度セキュリティーをチェックするため、『PHPサイバーテロの技法』を読んで、問題(になるかも知れない)部分をピックアップしてみた。
httpOnly [Security]
2008年4月17日
ほぼ一ヶ月ぶりの更新。現在、デフォルトスキンを表示させるスキン変数周りの整備中。インデックスページは、コメント機能以外は表示できるようになった。
さて、webサーフィンしていて見つけたセキュリティー情報のメモ。
httpOnlyをFirefoxで
PHP 5.2でクッキーのhttpOnlyフラグがサポートされるみたいです
XSSによるクッキー情報漏えいの防止策の一つとして。あとで、Jeansにも導入する。
さて、webサーフィンしていて見つけたセキュリティー情報のメモ。
httpOnlyをFirefoxで
PHP 5.2でクッキーのhttpOnlyフラグがサポートされるみたいです
XSSによるクッキー情報漏えいの防止策の一つとして。あとで、Jeansにも導入する。
セキュリティー対策、あれこれ [Security]
2008年2月3日
先の記事もそうであるが、セキュリティー対策のためのコードをいくつか追加したので、改めてメモ。
1)SQLインジェクション対策
sql::query()メソッドで、簡易プリペアードステートメントを使う。MySQL5やPostgreSQLほど本格的なプリペアードステートメントではないが、この方法でほぼ100%、SQLインジェクションは防げる。SQLステートメントでフィールド部分を入力値にしたがって変更したい場合は、core::fill()メソッドを用いて正規表現でホワイトリスト形式で入力値をチェックしながら値を挿入する。
2)XSS対策
core::echohtml()メソッドで、プリペアードステートメント様の機能が使える。正規表現で入力値をチェックすることも可能。
3)リモートスクリプトインクルード対策
クラス名を適切に選んでおけば、PHPファイルのインクルードはコアが自動的に行ってくれる。include, require などのステートメントを使うことはほとんどないはず。
4)ディレクトリトラバーサル対策
file_exists()の代わりに、core::checkFile()メソッドを使用する(下のコードを参照)。
5)ヌルバイト攻撃対策
リクエストにヌルバイトがあると、コア呼び出し時に自動的に停止する(先の記事のコードを参照)。
1)SQLインジェクション対策
sql::query()メソッドで、簡易プリペアードステートメントを使う。MySQL5やPostgreSQLほど本格的なプリペアードステートメントではないが、この方法でほぼ100%、SQLインジェクションは防げる。SQLステートメントでフィールド部分を入力値にしたがって変更したい場合は、core::fill()メソッドを用いて正規表現でホワイトリスト形式で入力値をチェックしながら値を挿入する。
2)XSS対策
core::echohtml()メソッドで、プリペアードステートメント様の機能が使える。正規表現で入力値をチェックすることも可能。
3)リモートスクリプトインクルード対策
クラス名を適切に選んでおけば、PHPファイルのインクルードはコアが自動的に行ってくれる。include, require などのステートメントを使うことはほとんどないはず。
4)ディレクトリトラバーサル対策
file_exists()の代わりに、core::checkFile()メソッドを使用する(下のコードを参照)。
5)ヌルバイト攻撃対策
リクエストにヌルバイトがあると、コア呼び出し時に自動的に停止する(先の記事のコードを参照)。
セキュリティー対策 [Security]
2007年12月24日
とりあえず、3つの対策を用意。
1)リモートコードインサーション対策
2)XSS対策
3)SQLインジェクション対策
何も考えずにコアの機能を利用することで、これらのセキュリティー対策が行えるようなツールを目指す。理想としては、意識せずにコードを書けば脆弱性はでず、何か特別なことを仕様としたときだけに脆弱性が出てしまうようなものにしたい。規約として、echo 命令はライブラリやプラグインでは使用禁止にするつもり。
1)リモートコードインサーション対策
2)XSS対策
3)SQLインジェクション対策
何も考えずにコアの機能を利用することで、これらのセキュリティー対策が行えるようなツールを目指す。理想としては、意識せずにコードを書けば脆弱性はでず、何か特別なことを仕様としたときだけに脆弱性が出てしまうようなものにしたい。規約として、echo 命令はライブラリやプラグインでは使用禁止にするつもり。