⑴ php的網站,怎麼掃描出潛藏的一句話木馬
查找那些高危函數就行了,比迅如困如eval
php後門木馬常用的函數畝念大橡輪致上可分為四種類型:
1. 執行系統命令: system, passthru, shell_exec, exec, popen,
proc_open
2. 代碼執行與加密: eval, assert, call_user_func,base64_decode, gzinflate,
gzuncompress, gzdecode, str_rot13
3. 文件包含與生成: require, require_once, include, include_once,
file_get_contents, file_put_contents, fputs, fwrite
4. .htaccess: SetHandler, auto_prepend_file, auto_append_file
⑵ PHP 對數組進行壓縮編碼,哪種最好
<?php
@set_time_limit(0);
if(php_sapi_name()!=='禪乎cli') {
header('Content-Type:text/plain');
}
$s = file_get_contents('xxx');
$data = array('data'=>str_repeat($s,100));
function benchmark($function, $times=1){
$started_at = microtime(1);
$data = null;
for($i=0; $i<$times; $i++){
$data = $function();
}
printf("%.5fs, length:%.5fm\n\n", microtime(1)-$started_at, (strlen($data) / 1024 /1024));
}
echo "serialize \n";
benchmark(function() use($data){
$t = ((serialize($data)));
$s = unserialize((($t)));
return $t;
});
echo "serialize + base64 \n";
benchmark(function() use($data){
$t = base64_encode((serialize($data)));
$s = unserialize((base64_decode($t)));
return $t;
});
echo "serialize + gzip \n";
benchmark(function() use($data){
$t = (gzcompress(serialize($data)));
$s = unserialize(gzuncompress(($t)));
return $t;
});
echo "serialize+base64_encode +gzip \n";
benchmark(function() use($data){
$t = base64_encode(gzcompress(serialize($data)));
$s = unserialize(gzuncompress(base64_decode($t)));
return $t;
});
exit();
返回值:
serialize
0.01427s, length:6.02410m
serialize + base64
0.17287s, length:8.03214m
serialize + gzip
0.43907s, length:1.44310m
serialize+base64_encode +gzip
0.51364s, length:1.92414m
感覺各有差襲慧優勢, 不知道選擇哪種方案來做...
要麼時間慢, 要麼容量大, 沒有即時間快,又容量小的方案虛答
⑶ 用PHP查找文本文件中指定字元間的值[
樓主,給你一個能看清取值過滾塌程的程序(變數的漢字部分可以隨便改)
<?php
$a = "eval(Urldecode(gzuncompress(base64_decode('哇哈哈哈串') )))";
echo $a;//輸出變數原值
echo "<兄羨hr />";
$a1=strpos($a,"'");
echo $a1;//輸入第一個'出現的位置
echo "<hr />";
$a2=strrpos($a,"'");
echo $a2;//輸出第二個'出現的位置
echo "<hr />";
$a3 = substr($a,$a1+1,$a2-$a1-1);
echo $a3;//輸出期望值
?>
運行結果:羨備拍
eval(Urldecode(gzuncompress(base64_decode('哇哈哈哈串') )))
--------------------------------------------------------------------------------
第一個'出現在42的位置
--------------------------------------------------------------------------------
第二個'出現在53的位置
--------------------------------------------------------------------------------
取從第42+1開始後的53-42-1個字元,就是結果
哇哈哈哈串
⑷ php 使用 gzcompress( )壓縮以後 伺服器的c 語言uncompress()不能解壓,該怎麼處理呀
不懂C語言,不過gzcompress()是敬襪壓縮字元凱宴串的。uncompress是解壓縮文件的,不可能解壓的亮孫激了的吧
⑸ 到底什麼是PHP序列化
在PHP中,序列化用於存儲或傳遞 PHP 的值的過程中,同時不丟失其類型和結構。本文講述PHP序列化的四種方案,感興趣的可以了解一下
序列化是將變數轉換為可保存或傳輸的字元串的過程;反序列化就是在適當的時候把這個字元串再轉化成原來的變數使用。這兩個過程結合起來,可以輕松地存儲和傳輸數據,使程序更具維護性。
1、什麼是PHP序列化——serialize和unserialize函數
這兩個是序列化和反序列化PHP中數據的常用函數。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//序列化數組$s = serialize($a);echo $s;//輸出結果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}
echo ''
;
//反序列化$o = unserialize($s);
print_r($o);
當數組值包含如雙引號、單引號或冒號等字元時,它們被反序列化後,可能會出現問題。為了克服這個問題,一個巧妙的技巧是使用base64_encode和base64_decode。
$obj = array();//序列化$s = base64_encode(serialize($obj)); //反序列化$original = unserialize(base64_decode($s));
但是base64編碼將增加字元串的長度。為了克服這個問題,可以和gzcompress一起使用。
//定義一個用來序列化對象的函數
function my_serialize( $obj ) { return base64_encode(gzcompress(serialize($obj))); }
//反序列化function my_unserialize($txt) { return unserialize(gzuncompress(base64_decode($txt))); }
2、什麼是PHP序列化——json_encode 和 json_decode
使用JSON格式序列化和反序列化是一個不錯的選擇:
使用json_encode和json_decode格式輸出要serialize和unserialize格式快得多。
JSON格式是可讀的。
JSON格式比serialize返回數據結果小。
JSON格式是開放的、可移植的。其他語言也可以使用它。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//序列化數組$s = json_encode($a);echo $s;//輸出結果:{"a":"Apple","b":"banana","c":"Coconut"}
echo '
;
//反序列化$o = json_decode($s);
在上面的例子中,json_encode輸出長度比上個例子中serialize輸出長度顯然要短。[page]
3、什麼是PHP序列化——var_export 和 eval
var_export 函數把變數作為一個字元串輸出;eval把字元串當成PHP代碼來執行,反序列化得到最初變數的內容。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//序列化數組$s = var_export($a , true);echo $s;//輸出結果: array ( 'a' => 'Apple', 'b' => 'banana', 'c' => 'Coconut', )
echo '
';
//反序列化eval('$my_var=' . $s . ';');
print_r($my_var);
4、什麼是PHP序列化——wddx_serialize_value 和 wddx deserialize
wddx_serialize_value函數可以序列化數組變數,並以XML字元串形式輸出。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//序列化數組$s = wddx_serialize_value($a);echo $s;
//輸出結果(查看輸出字元串的源碼): ApplebananaCoconut
echo '
';
//反序列化$o = wddx_deserialize($s);
print_r($o);//輸出結果:Array ( [a] => Apple [b] => banana 1 => Coconut )
可以看出,XML標簽字元較多,導致這種格式的序列化還是佔了很多空間。
結論
上述所有的函數在序列化數組變數時都能正常執行,但運用到對象就不同了。例如json_encode序列化對象就會失敗。反序列化對象時,unserialize和eval將有不同的效果。
本篇《什麼是PHP序列化?這個知識點才是你應該了解到的用》到這里就已經結束了,小編一直認為,某一個編程軟體受歡迎是有一定原因的,首先吸引人的一定是其功能,環球網校的小編祝您PHP學習之路順利,如果你還想知道更多php知識,也可以點擊本站的其他文章進行學習。
⑹ php gzencode函數需要擴展嗎
gzencode
(PHP 4 >= 4.0.4, PHP 5)
gzencode — Create a gzip compressed string
說明
string gzencode ( string $data [, int $level = -1 [, int $encoding_mode = FORCE_GZIP ]] )
This function returns a compressed version of the input data compatible with the output of the gzip program.
For more information on the GZIP file format, see the document: » GZIP file format specification version 4.3 (RFC 1952).
參數
data
The data to encode.
level
The level of compression. Can be given as 0 for no compression up to 9 for maximum compression. If not given, the default compression level will be the default compression level of the zlib library.
encoding_mode
The encoding mode. Can be FORCE_GZIP (the default) or FORCE_DEFLATE.
Prior to PHP 5.4.0, using FORCE_DEFLATE results in a standard zlib deflated string (inclusive zlib headers) after a gzip file header but without the trailing crc32 checksum.
In PHP 5.4.0 and later, FORCE_DEFLATE generates RFC 1950 compliant output, consisting of a zlib header, the deflated data, and an Adler checksum.
返回值
The encoded string, or FALSE if an error occurred.
更新日誌
版本 說明
5.4.0 FORCE_DEFLATE now generates RFC 1950 compliant output.
4.2.0 The encoding_mode parameter was added
範例
The resulting data contains the appropriate headers and data structure to make a standard .gz file, e.g.:
Example #1 Creating a gzip file
<?php
$data = implode("", file("bigfile.txt"));
$gzdata = gzencode($data, 9);
$fp = fopen("bigfile.txt.gz", "w");
fwrite($fp, $gzdata);
fclose($fp);
?>
參見
gzdecode() - Decodes a gzip compressed string
gzdeflate() - Deflate a string
gzinflate() - Inflate a deflated string
gzuncompress() - Uncompress a compressed string
gzcompress() - Compress a string
» ZLIB Compressed Data Format Specification (RFC 1950)
gzeof> <gzdeflate
[edit] Last updated: Sat, 17 Nov 2012
⑺ 高分求一段PHP加密代碼的解密演算法
eval(Urldecode(gzuncompress(base64_decode('加密字元串') ))); 你這句話不就是解碼出來了嗎??你還想怎麼處理?'加密字元串'這里換成變數就行了嘛,多個變數的話用數組存放,再租仿森遍歷這個數組不就行了嗎??
我暈,你不會將值賦給一個變數來保存呀,例如這樣,eval('$str = '.Urldecode(gzuncompress(base64_decode('加密字元串') )));這樣就是行大扮了,echo $str;就可以看得到弊畝了,
⑻ 求PHP解碼,不知是什麼加密的
?php
//解密PHP
$file='Code2.php';
$fp=fopen($file,'r');
$str=fread($fp,filesize($file));
fclose($fp);
$code=strdecode($str);
//forfuncde1
preg_match("/;(.*)]='(.*?)';for(/e",$code,$res);
$c1=$res[2];
//forfuncde1
preg_match("/;(.*)=(.*)('(.*)');(.*);(.*)$/e"胡讓,$res[1],$rs);
$c2=$rs[3];
//for睜做帆funcde2
preg_match("/'(@(.*?)(\'(.*?)\'))/e",$code,$res);
$c3=悉雹$res[2];
preg_match("/'.(.*?).'/e",$c3,$r);
preg_match("/('(.*?)','/e",$r[1],$r2);
$c4=$r2[1];
$c4=base64_decode(de1(destr($c4),1));
$c3=str_replace($r[0],$c4,$c3);
$funstr=gzuncompress(base64_decode($c3)).base64_decode($c1);
preg_match("/if(.*),'(.*?)'))/e",$funstr,$res);
$c5=$res[2];
//findmaincode
preg_match("/'(@(.*)(\'(.*?)\'.(/e",$code,$res);
$c=$res[2];
preg_match("/'.(.*?).'/e",$c,$r);
preg_match("/('(.*?)','/e",$r[1],$r2);
$c6=base64_decode(de1(destr($r2[1]),1));
$c=str_replace($r[0],$c6,$c);
//find$de2
preg_match("/".((.*)='(.*?)'));/e",$code,$res);
$de2=destr($res[2]);
$x=($de2.=de2($de2));
$c.=$x;
$decode=gzuncompress(base64_decode($c));
$str=explode('<!--<?phpendif;?>',$decode);
$str=explode('?><?php$GLOBALS',$str[1]);
$decode=$str[0].'?>';
echo$decode;
file_put_contents($file.'.de.php',$decode);
//////////////////////////////
functionde1($de1,$str2=''){
global$c1,$c2;
if(!$str2)return(base64_decode(destr($de1)));
$s9=de1($c2);
for($i=0;$i<strlen($de1);$i++)
$s9.=ord($de1{$i})<245?((ord($de1{$i})>140&&ord($de1{$i})<245)?chr(ord($de1{$i})/2):$de1{$i}):"";
return(base64_decode($s9));
}
functionde2(&$de2){
global$c5;
if(strstr($de2,$c5)){
$de2=str_replace($c5,'',$de2);
$de2=gzuncompress($de2);
}
if(strstr($de2,$c5)){
$de2=str_replace($c5,'',$de2);
de2($de2);
}
}
/////////////////////////////
functionstrdecode($str){
$len=strlen($str);
$newstr='';
for($i=0;$i<$len;$i++){
$n=ord($str[$i]);
$newstr.=decode($n);
}
return$newstr;
}
functiondecode($dec){
if(($dec>126||$dec<32)){
return'['.$dec.']';
}else{
returnchr($dec);
}
}
functiondestr($str){
$k=0;
$num='';
$n=strlen($str);
$code='';
for($i=0;$i<$n;$i++){
if($str[$i]=='['){
$k=1;
}elseif($str[$i]==']'){
$num=intval($num);
$code.=chr($num);
$k=0;
$num=null;
}else{
if($k==1){
$num.=$str[$i];
}else{
$code.=$str[$i];
}
}
}
return$code;
}
?>
不行就改改正則什麼的