1. 程式人生 > >比較好用的PHP防注入漏洞過濾函式程式碼

比較好用的PHP防注入漏洞過濾函式程式碼

<?php

//PHP整站防注入程式,需要在公共檔案中require_once本檔案
//判斷magic_quotes_gpc狀態
if (@get_magic_quotes_gpc()) {
    $_GET = sec($_GET);
    $_POST = sec($_POST);
    $_COOKIE = sec($_COOKIE);
    $_FILES = sec($_FILES);
}
$_SERVER = sec($_SERVER);
function sec(&$array) {
    //如果是陣列,遍歷陣列,遞迴呼叫
    if (is_array($array)) {
        foreach ($array as $k => $v) {
            $array[$k] = sec($v);
        }
    } else if (is_string($array)) {
        //使用addslashes函式來處理
        $array = addslashes($array);
    } else if (is_numeric($array)) {
        $array = intval($array);
    }
    return $array;
}
//整型過濾函式
function num_check($id) {
    if (!$id) {
        die('引數不能為空!');
    } //是否為空的判斷
    else if (inject_check($id)) {
        die('非法引數');
    } //注入判斷
    else if (!is_numetic($id)) {
        die('非法引數');
    }
    //數字判斷
    $id = intval($id);
    //整型化
    return $id;
}
//字元過濾函式
function str_check($str) {
    if (inject_check($str)) {
        die('非法引數');
    }
    //注入判斷
    $str = htmlspecialchars($str);
    //轉換html
    return $str;
}
function search_check($str) {
    $str = str_replace("_", "\_", $str);
    //把"_"過濾掉
    $str = str_replace("%", "\%", $str);
    //把"%"過濾掉
    $str = htmlspecialchars($str);
    //轉換html
    return $str;
}
//表單過濾函式
function post_check($str, $min, $max) {
    if (isset($min) && strlen($str) < $min) {
        die('最少$min位元組');
    } else if (isset($max) && strlen($str) > $max) {
        die('最多$max位元組');
    }
    return stripslashes_array($str);
}
//防注入函式
function inject_check($sql_str) {
    return eregi('select|inert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|UNION|into|load_file|outfile', $sql_str);
    // www.jb51.net 進行過濾,防注入
    
}
function stripslashes_array(&$array) {
    if (is_array($array)) {
        foreach ($array as $k => $v) {
            $array[$k] = stripslashes_array($v);
        }
    } else if (is_string($array)) {
        $array = stripslashes($array);
    }
    return $array;
}
?>