SlideShare une entreprise Scribd logo
1  sur  14
SECURE APPS
  For PHP


Fumiaki Matsuzawa
入力バリデート対策

ユーザーID(数値)の受け取り
ctype_digit(($_POST))等の
形式チェックを設けてからPHPで取得する。
SQLインジェクション対策
<バインド処理>
プリペアドステートメントと静的プレース
フォルダ
(エミュレートではない)を使って、
確実にSQLインジェクションを防ぐ。

MySQLの場合は、
mysql_real_escape_string()でエスケープして
からDBへ登録する。
クロスサイトスクリプティング
      対策
• htmlentities(str,ENT_QUOTES,
  Content-Typeヘッダで定義した文字セット );

日本語対応
output_handler         = mb_output_handler
mbstring.language       = japanese
mbstring.encoding_translation = On
mbstring.internal_encoding = UTF-8
mbstring.http_input      = auto
mbstring.http_output      = SJIS
CSRF対策
• トークンを利用して利用者がサブミットしたものだけ
   を受け付ける。
session_start();
$token = md5(uniqid(rand(),TRUE));
//トークンを設定
$_SESSION*‘token’+ = $token;
//トークンの作成時間を設定(受信側で有効期間を設
定)
$_SESSION*‘token_time’] = time();
・・・
<form method=“post”>
<input type=“hidden” name=“token” value=“<?echo
$token; ?>”>
ファイルアップロード攻撃対策
• Php.iniのupload_max_filesize
    ファイルサイズ最大サイズを設定
• Php.iniのpost_max_size
    HTTPヘッダのサイズを設定
セッションハイジャック対策
• トークンやSSL、に加えて、セッション識別
  子を使って回避します。

session_start();
If(!isset($_SESSION*‘token_initiated’+))
{
    session_regenerate_id();
    $_SESSION*‘token_initiated’] = TRUE;
}
セッションデータの流出防止
• session_set_handler()関数でセッションメカ
  ニズムを自分でDBに格納するように定義
  する。

session_set_handler(‘_open’, ‘_close’, ‘_read’,
‘_write’, ‘_destroy’, ‘_clean’);
セッションデータコンテナを開く、閉じる、
読み込む、書き出す、破棄する、古くなっ
たセッションデータを一括削除する。
ファイルシステム閲覧対策
• ドキュメントルートに設定ファイルを格
  納しない。

・basename()などでパス情報をチェック
する。

・ファイルアクセスが不要なアプリケー
ションの
 場合はファイルアクセスする関数を禁止
PHPの暗号化

PHPで暗号化にはmcrypt関数を使うことで、
数種類の異なる暗号化アルゴリズムを利用で
きる。

※5.3以降は標準となっている。
共有ホスティング環境対策
共有ホスティング環境(Apache)では
・環境変数にデータベースアクセスIDを持
つ
  SetEnv DB_USER “app_user”
 SetEnv DB_PASS “app_pass”

$db_user = $_SERVER*‘DB_USER’+;
$db_pass = $_SERVER[‘DB_PASS’];
共有ホスティング環境対策
パスワードはハッシュ化したもので認証する。
$salt = ‘test’;
$password_hash = md5($salt.md5($pass. $salt));
⇒などでハッシュ化を行い、
   DBに登録して、ハッシュ同士を比較する。
セキュリティに関する構成の
      point
構成ディレクティブの確認を行う。
allow_url_fopen 無効にする。
disable_functionsに無効化する関数を登録
   exec()、passthru()、phpinfo()、popen()、
   proc_open()、shell_exec()、system()など。
display_errorsを無効にする。
enable_dlを無効にする。
error_reportingにE_ALLを設定する。
セキュリティに関する構成の
      point
file_uploadsがファイルのアップロード機能
が
不要な場合は無効にする。
log_errorsを有効にし、定期的にチェックす
る。
magic_quotes_gpcを無効にする。【5.4で削
除】
memory_limitを8M程度に設定する。
open_basedirでPHPが開けるファイルを特定

Contenu connexe

Similaire à セキュアPHP

文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
 
Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携
Shinichi Tomita
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
akirahiguchi
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
Makoto Haruyama
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
Takuya Matsunaga
 
知って得するC#
知って得するC#知って得するC#
知って得するC#
Shota Baba
 

Similaire à セキュアPHP (20)

DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携Streaming API で実現する クラウド ⇔ イントラ連携
Streaming API で実現する クラウド ⇔ イントラ連携
 
今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
 
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
 
DB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data PlatformDB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data Platform
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/Androidセキュアコーディング
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
 
Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010
 
Cisco E メール セキュリティ アプライアンス(ESA)
Cisco E メール セキュリティ アプライアンス(ESA)Cisco E メール セキュリティ アプライアンス(ESA)
Cisco E メール セキュリティ アプライアンス(ESA)
 
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
 
知って得するC#
知って得するC#知って得するC#
知って得するC#
 
Sec013 その資格情報、簡
Sec013 その資格情報、簡Sec013 その資格情報、簡
Sec013 その資格情報、簡
 
ウェブセキュリティの常識
ウェブセキュリティの常識ウェブセキュリティの常識
ウェブセキュリティの常識
 
[Japan Tech summit 2017] DEP 003
[Japan Tech summit 2017]  DEP 003[Japan Tech summit 2017]  DEP 003
[Japan Tech summit 2017] DEP 003
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
 

セキュアPHP