1. 程式人生 > >php過濾注入變數

php過濾注入變數

<?php
//如果環境是php5並且遮蔽了長格式的預定義變數,就進行模仿長格式預定義變數。
if (@phpversion() >='5.0.0'&& (!@ini_get('register_long_arrays'|| @ini_get('register_long_arrays'=='0'||strtolower(@ini_get('register_long_arrays')) =='off'))
{
    
$HTTP_POST_VARS=$_POST;
    
$HTTP_GET_VARS=$_GET;
    
$HTTP_SERVER_VARS=$_SERVER;
    
$HTTP_COOKIE_VARS=$_COOKIE;
    
$HTTP_ENV_VARS=$_ENV;
    
$HTTP_POST_FILES=$_FILES;

    
// 判斷$_SESSION是否已經註冊生效
if (isset($_SESSION))
    {
        
$HTTP_SESSION_VARS=$_SESSION;
    }
}

// 防範注入GLOBALS變數
if (isset($HTTP_POST_VARS['GLOBALS']) ||isset($HTTP_POST_FILES['GLOBALS']) ||isset($HTTP_GET_VARS['GLOBALS']) 
||isset($HTTP_COOKIE_VARS['GLOBALS']))
{
    
die("Hacking attempt");
}

// 防範$HTTP_SESSION_VARS偽裝
if (isset($HTTP_SESSION_VARS&&!is_array($HTTP_SESSION_VARS))
{
    
die("Hacking attempt");
}

//以下程式碼在環境register_globals = on時模擬off
if (@ini_get('register_globals'=='1'||strtolower(@ini_get('register_globals
')) =='on')
{
    
//不應該被unset的,並且預定義變數陣列中也不包含的變數名,如果外來資料中存在就是訪問者注入的!
$not_unset=array('HTTP_GET_VARS','HTTP_POST_VARS','HTTP_COOKIE_VARS','HTTP_SERVER_VARS','HTTP_SESSION_VARS','HTTP_ENV_VARS','HTTP_POST_FILES');

    
// 如果HTTP_SESSION_VARS變數未被初始化或不是陣列,array_merge函式將失敗,所以需要核實HTTP_SESSION_VARS
if (!isset($HTTP_SESSION_VARS||!is_array($HTTP_SESSION_VARS))
    {
        
$HTTP_SESSION_VARS=array();
    }

    
// 合併為一個大陣列,陣列中包含各種外來變數
$input=array_merge($HTTP_GET_VARS,$HTTP_POST_VARS,$HTTP_COOKIE_VARS,$HTTP_SERVER_VARS,$HTTP_SESSION_VARS,$HTTP_ENV_VARS,$HTTP_POST_FILES);
    
    
//防止偽裝陣列
unset($input['input']);
    
unset($input['not_unset']);
    
    
//所有的名字未列入$not_unset陣列的外來變數將被unset,列入的停止執行頁面
while (list($var,= @each($input))
    {
        
//如果訪問者注入了與預定義變數同名的變數
if (in_array($var,$not_unset))
        {
            
die('Hacking attempt!');
        }
        
//echo $var.'<br>';
unset($$var);
    }

    
unset($input);
}
?>

相關推薦

php過濾注入變數

<?php//如果環境是php5並且遮蔽了長格式的預定義變數,就進行模仿長格式預定義變數。if (@phpversion() >='5.0.0'&& (!@ini_get('register_long_arrays') || @ini_get('register_long_arra

淺析php過濾html字串,防止SQL注入的方法

本篇文章是對php中過濾html字串,防止SQL注入的方法進行了詳細的分析介紹,需要的朋友參考下   批量過濾post,get敏感資料 複製程式碼 程式碼如下: $_GET = stripslashes_array($_GET); $_POST = st

通用的PHP注入漏洞攻擊的過濾函式程式碼

<?PHP  //PHP整站防注入程式,需要在公共檔案中require_once本檔案 //判斷magic_quotes_gpc狀態 if (@get_magic_quotes_gpc ()) { $_GET = sec ( $_GET ); $_POST = se

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

<?php //PHP整站防注入程式,需要在公共檔案中require_once本檔案 //判斷magic_quotes_gpc狀態 if (@get_magic_quotes_gpc()) { $_GET = sec($_GET); $_POST =

php 過濾emoji

ace strlen callback ring [0 back return trim repl function filter_emoji_string($str){ $str = trim($str); $str = preg_replace_callb

php過濾表單提交的html等危險代碼

nbsp postget scrip ram text body tle copy ace 表單提交如果安全做得不好就很容易因為這個表單提交導致網站被攻擊了,下面我來分享兩個常用的php過濾表單提交的危險代碼的實例,各位有需要的朋友可參考。 PHP過濾提交表單的

php過濾微信特殊字符方案--》2017新版

match turn code php filter 過濾特殊字符 rep pre return /** * 過濾特殊字符 * @param unknown $str */ private function filterStr($str)

PHP過濾html註釋

但是 ace 繼續 per blog php echo 基本上 repl 過濾html註釋: 所謂過濾,不過是字符串的匹配與替換,這裏我們用到的正則匹配替換函數preg_replace(reg,replace,string);,PHPer都清楚,這個函數的關鍵在於reg的精

開始PHP,常量/變數與記憶體間的關係--傳值

一.常見的PHP程式碼嵌入式方式,與html結合 要注意:檔名字尾必須形如xxx.php否則html將無法解析 二.php脫離html程式碼獨立工作,沒有其他程式碼 不需要藉助Apache工作,只需要php引擎;通過php.exe去執行php檔案 方式2帶來的問題是:只能由伺服器訪問,而方式一

PHP篇】變數與常量

變數: 變數的作用域為函式區域 判斷是否存在:isset($變數名);//返回bool 判斷是否為空:empty($變數名)//變數未宣告或者值為空返回1,否則返回false 清除變數:unset($變數名)  或者 $變數名=null; 引用:$a=10;  $b

PHP函式比較變數

  作為一個PHPer,一定要多看PHP手冊,每過一遍手冊,你總會發現一些以前被你忽略的一些東西;我們可以從各個不同的地方/渠道學習到PHP的相關知識,但也不要忘記我們的手冊,PHP手冊永遠是學習和提升PHP的一本好書;看到很多博文都有討論過 ‘empty()的坑’、‘empty()與isset(

spring 注入變數不可以改成靜態變數

Spring中,變數注入到靜態方法中,變數會被改為靜態的,雖然不報錯,但執行時會報空指標錯誤。 Spring不能注入static變數的原因,具體詳情如下所示:          

php擴充套件開發-變數設定和銷燬

//定義變數 zval *op; //分配記憶體 MAKE_STD_ZVAL(op); //賦值 ZVAL_LOGN(op, 0); //獲取 op 的值 if (Z_LVAL_P(op)) { php_printf("%s", "true"); } else { p

PHP依賴注入、控制反轉

要想理解 PHP 依賴注入 和 控制反轉 兩個概念,就必須搞清楚如下的兩個問題: DI —— Dependency Injection 依賴注入 IoC —— Inversion of Control 控制反轉 什麼

PHP SQL注入漏洞防範

在PHP中採用魔術引號進行過濾,但是PHP5.4之後被取消了,同時在遇到int型注入也不會那麼有效,所以用的最多的還是過濾函式和類(例如discuz,dedecms,phpcms),如果單純的過濾函式寫的不嚴謹,就會出現繞過的情況,最好的解決方法還是預編譯的方式。 GPC/runtime魔術

PHP超全域性變數整理

PHP中,有很多超全域性變數可以在任何位置進行訪問。 第一個: $GLOBALS 解釋: 該超全域性變數包含了當前PHP指令碼檔案中所有的變數,它是一個關聯陣列,陣列的鍵就是變數的名稱 第二個: $_SERVER 解釋: 這個超全域性變數是一個包含了大量的伺服器端資訊,以及請求頭

威脅快報|CVE漏洞—PHPCMS2008 /type.php程式碼注入高危漏洞預警

背景 PHPCMS網站內容管理系統是國內主流CMS系統之一,同時也是一個開源的PHP開發框架。 PHPCMS最早於2008年推出,最新版已出到v9.6.3,但由於穩定、靈活、開源的特性,時至今日,PHPCMS2008版本仍被許多網站所使用。 漏洞簡介 PHPCMS 2008存在的程式碼注入漏洞,導致攻

php $$a 可變變數

$a = 'hello'; $$a = 'world'; echo "test $a <br>"; echo "show $$a <br>"; echo "is ${$a} <br>"; 輸出結果為: test hello show $hello is

CVE漏洞—PHPCMS2008 /type.php程式碼注入高危漏洞預警

11月4日,阿里雲安全首次捕獲PHPCMS 2008版本的/type.php遠端GetShell 0day利用攻擊,攻擊者可以利用該漏洞遠端植入webshell,導致檔案篡改、資料洩漏、伺服器被遠端控制等一系列嚴重問題。建議受影響使用者儘快升級到最新版本修復。 ——————— PHPCMS網