phpコードセキュリティ関連(1)-ecshopのいくつかのセキュリティ関連関数


/**
 *                   
 *
 * @access  public
 * @param   mix     $value
 *
 * @return  mix
 */
function addslashes_deep($value)
{
    if (empty($value))
    {
        return $value;
    }
    else
    {
        return is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value);
    }
}

上のarray_map関数は多次元配列に対してaddslashes_を再帰的に呼び出すdeepでフィルタリングを行います.
 
/**
 *                   
 *
 * @access  public
 * @param   mix     $value
 *
 * @return  mix
 */
function stripslashes_deep($value)
{
    if (empty($value))
    {
        return $value;
    }
    else
    {
        return is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value);
    }
}

 
/**
 *     header   ,             
 *
 * @param   string  string    
 *
 * @return  void
 **/
function ecs_header($string, $replace = true, $http_response_code = 0)
{
    if (strpos($string, '../upgrade/index.php') === 0)
    {
        echo '<script type="text/javascript">window.location.href="' . $string . '";</script>';
    }
    $string = str_replace(array("\r", "
"), array('', ''), $string); if (preg_match('/^\s*location:/is', $string)) { @header($string . "
", $replace); exit(); } if (empty($http_response_code) || PHP_VERSION < '4.3') { @header($string, $replace); } else { @header($string, $replace, $http_response_code); } }

PHPのヘッダ関数はURLに含まれるデータの正確なフィルタリングが欠けており,リモート攻撃者はこの脆弱性を利用してスクリプト注入攻撃を行うことができる.
またPHPのヘッダ()実装には潜在的なバッファオーバーフローホールが存在する.
 
/**
 *   MYSQL LIKE        
 *
 * @access      public
 * @param       string      string    
 * @return      string
 */
function mysql_like_quote($str)
{
    return strtr($str, array("\\\\" => "\\\\\\\\", '_' => '\_', '%' => '\%', "\'" => "\\\\\'"));
}

またhtmlspecialchars()関数は、定義済みの文字をHTMLエンティティに変換します.htmlentities関数