blog/

Blog of Namu Work Studio

名無製作所 : Webデザイン製作日誌

home > PHP
2010/05/19

脆弱性診断検査

Webアプリケーションの脆弱性診断検査の一例
制作する上では必須かなと思われたので、抜粋掲載させていただきました。

下記サイト様より一部抜粋させていただきました。
@IT「星野君のWebアプリほのぼの改造計画」

Webアプリケーションの安全性を高めるためには、実際に攻撃パターン(脆弱性の可能性を示唆できるパターン)を試すことが必要となってくる。すべての攻撃パターンを網羅することは難しいが、各攻撃パターンで共通している部分を取り出して検査することで、ほとんどの攻撃を防ぐことが可能となる。

以下に、代表的な脆弱性4つに対する検査パターンおよび確認事項について示す。これらの項目を実施するだけで格段にセキュリティが向上する。

本番環境に近い環境で行うことが望ましいが、Webアプリケーションの作りによってはサーバの障害につながる恐れがあるのでテスト環境で実施することをお勧めする

●Cross-Site Scripting

[検査パターン例] 「’>”><s>test</s>」
[確認事項] 入力した文字がそのままレスポンスの中に含まれていないか(含まれていたら脆弱)

※ただし、マルチバイト文字を利用したパターンのような特殊な例は対象外(参考:第10回

●SQL Injection(参考:第2回第9回

[検査パターン例] 「’」(シングルクオーテーション)
[確認事項] SQLエラーが出力されないか
[検査パターン例] 「’||’」または「’%2b’」(連結を意味するSQL文)
[確認事項] シングルクオーテーションのみの場合と同じ挙動になるか(異なる場合は脆弱)

●OS Command Injection(参考:第7回

[検査パターン例] 「||/bin/date|」(Linux系の場合)
[確認事項] 時刻が表示されないか

●Directory Traversal(参考:第5回)

[検査パターン例] 「../../../../../../../etc/passwd」(Linux系の場合)
[確認事項] 「/etc/passwd」の中身が表示されないか
【参考リンク】

ITmedia エンタープライズ:

脆弱なWebアプリケーションから脱却する5つのコツ

http://www.itmedia.co.jp/enterprise/articles/0602/02/news001.html

一部上記と内容がかぶりますが、
下記サイト様より抜粋、掲載させていただきました。
ITmedia:脆弱なWebアプリケーションから脱却する5つのコツ

Buffer Overflow
操作:5000バイトの長さの文字列を入力
確認:言語処理系やDBドライバなどが直接エラーを出力したりしないか? 誤動作しないか?

Cross Site Scripting
操作:「’>”><script>alert()</script>」を入力
確認:アラートボックスが表示されるか?
操作:任意の文字列(例:abc)を入力
確認:次に表示される画面内のフォームに含まれるか? 含まれるなら、value属性がしっかりとクォートされているか?

Parameter Manipulation
操作:数値パラメータの場合、(元の値-1)、(元の値+1)としてみる
確認:異なる機能が実行されたり、本来アクセスできるべきでない情報が表示されたりするか?

Session Exploitation
操作:連続してセッションIDを発行させてみる
確認:それらのセッションIDに規則性はあるか? 発行されるセッションIDが推測できる場合、推測したセッションIDを使ってアクセスし、他人になりすますことができるか?

SQL Injection
操作:シングルクォート「’」を入力
確認:DBドライバのエラーメッセージが表示されるか?
操作:「’ or 1=1–」を入力
確認:認証バイパスや、テーブル内の全レコードへアクセスできたりするか?

OS Command Injection
操作:「||/bin/date|」(Unix系のサーバを想定)
確認:時刻が出力されるか?

Cross Site Request Forgeries
操作:処理をコミットするリクエストで送信されるパラメーターの一覧を見る
確認:Cookie以外のパラメータに、他人が推測できないパラメーターを含んでいるか? Cookie以外のパラメータがすべて推測可能であれば脆弱だ。

Category : PHP

2010/04/10

mb_strlen() 文字数を得る時の注意

文字数をチェックしようとstrlen()やmb_strlen() を
使おうとしたが、使用している文字コードによって
マルチバイト文字(日本語など)の文字数が異なることが判明。

shift-jis = 2文字
utf-8 = 2文字もしくは3文字

mb_strlen()では、マルチバイトか否かに関わらず
1文字と表示するはずと思っていたが、
そうならないので、ググってみたら下記サイトで原因と回避方法が
紹介されていました。感謝です。

21. mb_strlen()関数の落とし穴

方法は検索文字列の後に文字コードを
指定してやれば良いようです。

echo mb_strlen("日本語", 'utf-8')

上記は

3

と表示されます。

Category : PHP

2010/02/02

Smarty インストール その2(xampp)

ついでにxamppの場合もメモ。

インストールの2.3.以外は全て同じ。
2.はxamppの直下に「smarty」ディレクトリを設置。
3.は「C:\xampp\php\php.ini」の795行目、796行目あたりの
下記設定に変更。
; http://php.net/include-path
include_path = “.;C:\xampp\php\PEAR;C:\xampp\smarty\libs\”

Category : PHP

2010/02/01

Smarty インストール その1(さくらインターネット)

さくらインターネット利用時の
Smartyインストール方法を備忘録

こちらのサイト様を参考にさせていただきました。
自分用にメモ(上記サイト様より抜粋、一部加筆)。

インストール

  1. Smartyをダウンロードする。
  2. Smarty-xx.xx.xx.zipを解凍して得られる/Smarty-xx.xx.xx/フォルダを/Smarty/にリネームして、さくらインターネットさんのサーバールートにアップロード。
  3. さくらインターネットさんのサーバーのコントロールパネルにログインし、「アプリケーションの設定」ー「PHP設定の編集」でphp.iniに「include_path=”.:/home/account/Smarty/libs/”」を記載して保存。

Smartyの動作確認

  1. martyを使用したプログラムを実行するためのフォルダーを作成する。
    /prgram_root/
    |–/templates/
    |–/templates_c/
  2. /templates_c/フォルダのパーミッションを777に変更する。
  3. /prgram_root/フォルダに以下のテストスクリプト(smarty_test.php)を置く。
    <?php
    require_once(“Smarty.class.php”);
    $smarty = new Smarty();
    $smarty->display(“smarty_test.tpl”);
    ?>
  4. /templates/フォルダに以下のテンプレート(smarty_test.tpl)を置く。
    Smartyのバージョン:{$smarty.version}
  5. ブラウザで、テストスクリプト(smarty_test.php)を呼び出し、以下のようにSmartyのバージョンが表示されればOK。
    Smartyのバージョン:xx.xx.xx

Category : PHP

2009/10/20

PDFを強制的にダウンロード

PDFは通常リンクだとブラウザ上で開いてしまいます。
容量の軽いPDFであれば良いのですが、
重いものだと開くのに時間がかかりユーザーに
迷惑が掛かります。

ホスティングサーバーで
設定できる方法を探したところ下記2つの方法を
見つけました。

  1. .htaccessを設置する。
  2. PHPファイルを設置する。

1.は、こちらのサイトで紹介されています。
2.は、こちらのサイトでスクリプトが提供されいていますが、
設定について少し備忘録。
上記スクリプトをforce-download.php名でサーバー上に設置。
ダウンロードのリンクURLを

http://yoursiteURL/force-download.php?file=ダウンロードさせるPDF名.pdf

(force-download.phpとダウンロードするPDFをルート直下に設置した場合)
と、記載します。
これでダウンロードされます。

ちなみに2.はPDFだけではなく他に
WordやExcelなども同じように設定できるようです。

Category : PHP,Server

2009/04/06

PHPでRSSを読み込んで表示する

こちらのソースを参考、利用させていただきました。

http://ameblo.jp/yamasita-94nsr/entry-10018566158.html

感謝です。

Memo

  • 私の場合、UTF-8での表示のため文字コード変換のところを変更

Impression

  • PHPを勉強しないとカスタマイズは難しいですね。これ以上のカスタマイズは専門家の方にお願いした方が良さそうです。

Category : PHP

Search

Information

Category

Archive