サニタイズ用のPHPコード

提供:MDWiki
移動: 案内, 検索

コード

少し古い時代に書いたコード。一文字ずつ処理するとかエンコーディングを汎用化するなどの修正を加える予定。

<?php

ini_set( 'mbstring.internal_encoding', 'sjis' );
ini_set( 'mbstring.http_output', 'sjis' );
ini_set( 'mbstring.encoding_translation', FALSE );
ini_set( 'default_charset', 'sjis' );
	
	/* -------------------------------------------------------------------------------------------------
	 * file name      :  sanitize.php
	 * compatibility  :  PHP 4.4.3+ / UTF-8 [LF]
	 * description    :  Sanitization library
	 * code copyright :  Copyright(C)2008 by *****.
	 * revision       :  0.0.1
	 * date           :  managed since [2008-09-22 18.27 (JST: GMT+0900) @435]
	 * encode phrase  :  時々京の方向に幅が細くて美しい線が入った飾りを持つ雀が往く
	 * encode phrase  :  男は傷ついた拳で美しく印刷された一冊の書を持って憎たらしい相手の笑いに応じた
	 * encode phrase  :  上記の文はエディタにエンコード判定させるためのダミー文です。
	  ------------------------------------------------------------------------------------------------- */
	
	// 改行文字
	define( 'SAN_BREAK_CHARS', "/(\\r|\\n|%0a|\\0a|%0d|\\0d)/" );
	// スクリプト用文字
	define( 'SAN_SCRIPT_CHARS', "/(<|<|&#x0+?3c|&#x0+?60|&#x0+?3e|&#x0+?62|%3cscript%3e|%3e%3c%73%63%72%69%70%74%3e)/i" );
	// ヌルバイト文字
	define( 'SAN_NULL_CHARS', "/(\\x00|\\0)/i" );
	// 例外なしに許可しない不正文字
	define( 'SAN_BLACK_CHARS', "/(%20|%u2216|%2e%2e%2f|%5c|%%35c|%255c|%%35%63|%25%35%63|%7c|%21|#|!|\||\/\/\/|\.\.\/)/i" );
	// 場合によっては許可する文字
	define( 'SAN_DISALLOWED_CHARS', "/[^0-9a-zA-Z\=\?\.\:\/\-\_|&]/" );
	// 入力値の桁数最大値
	define( 'SAN_LENGTH_VAR', 100 );
	
	function Secure( $input ) {
	
	  if ( is_array( $input ) ) {
	    // 入力値が配列の場合
	    while( list( $key, $value ) = each( $input ) ) {
	      if ( is_array( $input[ $key ] ) ) {
	        // 入力値が高次元配列の場合
	        Sanitize( $input[ $key ] );
	      } else {
	        $input[ $key ] = Sanitize( $input[ $key ] );
	      }
	    }
	    $output = $input;
	  } else {
	    // 入力値が配列として認識されないときは変数として扱う
	    $output = Sanitize( $input );
	  }
	  return $output;
	
	  // the end of definition: Secure()
	}
	
	function Sanitize( $in ) {
	
	  if ( is_array( $in ) ) {
	    while( list( $k, $v ) = each( $input ) ) {
	      // 桁数制限
	      $v = strlen( $v ) > SAN_LENGTH_VAR ? substr( $v, 0, SAN_LENGTH_VAR ) : $v;
	      // 改行文字を削除
	      $v = preg_replace( SAN_BREAK_CHARS, '', $v );
	      // スクリプト実行文字を削除
	      $v = preg_replace( SAN_SCRIPT_CHARS, '', $v );
	      // 不正文字を削除
	      $v = preg_replace( SAN_BLACK_CHARS, '', $v );
	      //$v = preg_replace( SAN_DISALLOWED_CHARS, '', $v );
	      // ヌルバイト文字を削除
	      $v = str_replace( "\\0", "", $v );
	      $v = str_replace( "\\x00", "", $v );
	      // 最後に定番
	      $v = trim( htmlspecialchars( $v, ENT_QUOTES ) );
	      return $v;
	    }
	  } else {
	    // 桁数制限
	    $in = strlen( $in ) > SAN_LENGTH_VAR ? substr( $in, 0, SAN_LENGTH_VAR ) : $in;
	    // 改行文字を削除
	    $in = preg_replace( SAN_BREAK_CHARS, '', $in );
	    // スクリプト実行文字を削除
	    $in = preg_replace( SAN_SCRIPT_CHARS, '', $in );
	    // 不正文字を削除
	    $in = preg_replace( SAN_BLACK_CHARS, '', $in );
	    //$in = preg_replace( SAN_DISALLOWED_CHARS, '', $in );
	    // ヌルバイト文字を削除
	    $in = str_replace( "\\0", "", $in );
	    $in = str_replace( "\\x00", "", $in );
	    // 最後に定番
	    $in = trim( htmlspecialchars( $in, ENT_QUOTES ) );
	    return $in;
	  }
	}

リンク

個人用ツール
名前空間
変種
操作
案内
ツールボックス