【9】WEB安全學習----PHP基礎語法二
目錄
一、流程控制
1、IF語句
<?php #IF語句第一種形式 if if(True){ echo 'hello world<br />'; echo 'php is if'; } #IF語句第二種形式 if-else if(True){ echo 'True'; }else { echo 'False'; } #IF語句第三種形式 if-elseif-else $int1 = 5; if($int1 === 1){ echo '1'; }elseif($int1 ===2){ echo '2'; }elseif($int1 ===3){ echo '3'; }else{ echo 'hello'; } #獲取星期幾例子 輸出 2018年09月01日 14:58:52星期六 header('content-type:text/html;charset=utf8'); #有中文,設定編碼 echo @date('Y年m月d日 H:i:s'); #加上錯誤抑制符@,就不會顯示日期警告 $a = @date('w'); if($a === '1'){ echo '星期一'; }elseif($a === '2'){ echo '星期二'; }elseif($a === '3'){ echo '星期三'; }elseif($a === '4'){ echo '星期四'; }elseif($a === '5'){ echo '星期五'; }elseif($a === '6'){ echo '星期六'; }elseif($a === '0'){ echo '星期日'; }else{ echo '錯誤'; } ?>
2、預定義變數
- _POST:接收表單以POST方式傳送的資料
- _GET:接收以?形式傳參的資料
- _FIFES:檔案上傳變數
- _SERVER:伺服器和執行環境變數
- _ENV:環境變數
- _SESSION:會話變數
- COOKIE:HTTP Cookie
- REQUEST:$_GET+$_POST+$_COOKIE
- GLOBALS:超全域性變數,在全部作用域中始終可用的內建變數
- $php_errormsg:前一個錯誤資訊
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>POST、GET和REQUEST例子</title> </head> <body> <form action="" method="post"> 姓名:<input type="text" name="name" id=""> <input type="submit" name="submit" value="提交"> </form> <a href="http://127.0.0.1/bj/index.php?name=php">GET提交</a> <?php if(isset($_POST['submit'])){ #使用isset()函式,檢測變數是否被設定值 $name=$_POST['name']; echo '歡迎'.$name; } if(isset($_GET['name'])){ echo '歡迎'.$_GET['name']; } echo $_REQUEST['name']; ?> </body> </html>
3、Switch語句
<?php /* switch(exp){ case 值1: 程式碼段; break; case 值2: 程式碼段; break; default: 程式碼段; break; } */ header('content-type:text/html;charset=utf-8'); [email protected]('w'); switch($date){ case '1': echo '星期一'; break; case '2': echo '星期二'; break; case '3': echo '星期三'; break; case '4': echo '星期四'; break; case '5': echo '星期五'; break; case '6': echo '星期六'; break; default: echo '星期日'; break; } ?>
4、For迴圈
<?php
for($i=1;$i<10;$i++){
echo '<br />';
for($j=1;$j<=$i;$j++){
echo $j.'*'.$i.'='.$i*$j." ";
}
}
#continue:跳過本次迴圈,繼續下次迴圈
#break:跳出迴圈
?>
5、While迴圈
<?php
$i=1;
while($i<10){
$j=1;
echo '<br />';
while($j<=$i){
echo $j.'*'.$i.'='.$i*$j.' ';
$j++;
}
$i++;
}
#do-while迴圈,無條件執行一次迴圈體程式碼
do{
echo 'aaaa';
}while(False)
?>
二、陣列
建立陣列
<?php
#一、通過array()函式宣告陣列
$array1=array(); //宣告一個空陣列
var_dump($array1); //array(0) { }
echo gettype($array1); //array
var_dump(is_array($array1)); //bool(true)
$array2=array(1,2.3,'hello','name'=>'php'); //定義混合陣列
var_dump($array2); //陣列下標從0開始,陣列分為索引陣列和關聯陣列
/*
array(4) {
[0]=>
int(1)
[1]=>
float(2.3)
[2]=>
string(5) "hello"
["name"]=>
string(3) "php"
}
*/
#二、動態建立陣列 連續索引陣列
$array1[]=1;
$array1[]=3.14;
$array1[]='aaa';
var_dump($array1);
#手動指定陣列下標
$array2[0]=1;
$array2[1]=3.14;
$array2[2]='aaa';
var_dump($array1);
#動態建立關聯陣列
$arr1['name']='xiaoming';
$arr1['age']=20;
$arr1['sex']='男';
$arr1[]=2;
var_dump($arr1);
#三、快速建立索引陣列
$arr=range(1,10);
var_dump($arr); //array(10) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) [7]=> int(8) [8]=> int(9) [9]=> int(10) }
$arr1=range(1,10,2); //指定步長
var_dump($arr1); //array(5) { [0]=> int(1) [1]=> int(3) [2]=> int(5) [3]=> int(7) [4]=> int(9) }
#通過compact()函式快速建立關聯陣列
$name='xiaoming';
$age=20;
$addr='CQ';
$arr1=compact('name','age','addr');
print_r($arr1); //Array ( [name] => xiaoming [age] => 20 [addr] => CQ )
?>
使用陣列
<?php
#對陣列進行增刪改查
$arr['name']='php';
$arr['age']=20;
$arr['addr']='CQ'; //增:
echo $arr['name']; //查: 通過指定鍵名獲取鍵值 php
$arr['name']='PHP'; //改: 對陣列內元素進行修改,只需要覆蓋以前的鍵值即可
echo $arr['name']; //PHP
unset($arr['name']); //刪:使用unset()函式刪除陣列元素
print_r($arr);
unset($arr); //刪除整個陣列
?>
多維陣列
<?php
#使用array()函式建立多維陣列
$arr=array(
array(1,2,3),
array(4,5,6)
);
print_r($arr); //Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [1] => Array ( [0] => 4 [1] => 5 [2] => 6 ) )
#使用動態建立多維陣列
$arr1[0]['dd']='php'; //建立一個二維陣列
$arr1[0]['name']='hello';
print_r($arr1);
/*
Array
(
[0] => Array
(
[dd] => php
[name] => hello
)
)
*/
echo $arr1[0]['name']; //取值
?>
遍歷陣列
<?php
#格式為:foreach($array as key=>value)
$arr1[]='aaa';
$arr1[]='bbb';
$arr1[]='ccc';
$arr1[]='ddd';
foreach($arr1 as $key){ //只取key鍵名
echo $key.'<br />';
}
/*
aaa
bbb
ccc
ddd
*/
$arr2['name']='PHP';
$arr2['age']=20;
$arr2['addr']='CQ';
foreach($arr2 as $key=>$value){ //取key和value
echo $key.'=>'.$value.'<br />';
}
/*
name=>PHP
age=>20
addr=>CQ
*/
#生成二維陣列
$arr1[]=array('name'=>'php','age'=>20,'addr'=>'CQ');
$arr1[]=array('name'=>'C++','age'=>18,'addr'=>'SH');
$arr1[]=array('name'=>'JAVA','age'=>29,'addr'=>'CD');
print_r($arr1);
/*
Array
(
[0] => Array
(
[name] => php
[age] => 20
[addr] => CQ
)
[1] => Array
(
[name] => C++
[age] => 18
[addr] => SH
)
[2] => Array
(
[name] => JAVA
[age] => 29
[addr] => CD
)
)
*/
foreach($arr1 as $key=>$value){ //遍歷二維陣列
echo $value['name'].'<br />';
echo $value['age'].'<hr />';
};
?>
陣列運算子
+:合併陣列,如果都有相同的鍵則取左邊的
==:具有相同的鍵值則為True
===:具有相同的鍵值且類似和順序都相同則為True
!=:具有不相同的鍵值則為True
!==:具有不相同的鍵值且類似和順序都相同則為True
<?php
$arr1=array(1,2,3,4);
$arr2=array('aa','bb');
$arr3=$arr1+$arr2;
print_r($arr3); //Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
?>
三、系統函式
字串函式
長度:strlen($String) 得到字串長度
echo strlen('hello你好'); //11 在UTF-8中,一箇中文佔3個長度
字串查詢:strpos($string,$serch[,$offset]) 在指定字串中查詢目標字串第一次出現的位置
echo strpos('hello','l'); //2
字串查詢:stripos($string,$serch[,$offset]) 忽略大小寫的去查詢
echo stripos('heLlo','l'); //2
字串替換:str_replace($search,$replace,$string) 替換字串 str_ireplace():忽略大小寫進行替換
echo str_replace('a','1','aaabbbccc'); //111bbbccc
字串大小寫轉換:strtolower() 到小寫、strtoupper() 到大寫
echo strtolower('ABC'); //abc
echo strtoupper('abc'); //ABC
字串擷取:substr($string,$start[,$length]) 擷取指定長度字串
echo substr('abcdefg',3); //defg
echo substr('abcdefg',3,2); //de
字元ASCII:ord() chr()
echo ord('a'); //97
echo chr(98); //b
加密:md5()、sha1()
echo md5('admin'); //21232f297a57a5a743894a0e4a801fc3
echo sha1('admin'); //d033e22ae348aeb5660fc2140aec35850c4da997
字串過濾:
1、trim() 刪首尾空
echo trim(' a bc '); //a bc
2、strip_tags() 過濾字串中HTML標記
echo strip_tags("<html><h1>hello</h1></html>"); //hello
3、addslashes() 使用反斜線引用字串中特殊字元
echo addslashes("a'"); //a\'
4、htmlentities()
echo htmlentities('<script>alert(/"xs"/)</script>'); //<script>alert(/"xs"/)</script>gt;
5、nl2br() 將字串中的\n用<br/>代替
echo nl2br("hello\nworld"); //hello<br />world
字串比較:strcmp() 比較兩個字串大小
echo strcmp('aaa','bbb'); //-1
分割文字:expload($delimiter,$string) 將指定字串拆分為陣列
print_r(explode('#','aaa#bbb#ccc')); //Array ( [0] => aaa [1] => bbb [2] => ccc )
合併文字:join($delimiter,$array) 將陣列連線成字串
$arr1=array('aaa','bbb','ccc');
echo join('-',$arr1); //aaa-bbb-ccc
反轉字元:strrev()
echo strrev('abc'); //cba
數學函式
求絕對值:abs($number)
四捨五入:round($number,$percision)
冪運算:pow($base,$exp)
平方根:sqrt($number)
求最大值:max($va1,$va2......)
求最小值:min($va1,$va2......)
產生隨機數:mt_rand($min,$max)
日期時間函式
得到當前時間戳:time()
echo time();//1535887462
得到當前伺服器時間:date($format[,$time])
echo date('Y-m-d'); //2018-09-02
四、自定義函式
定義函式
<?php
#函式的定義
function fun1($int1,$int2){
return $int1+$int2;
}
echo fun1(3,5); //函式的呼叫
?
函式的引數
<?php
#函式的引數分為2種:形參和實參
#形參有2種:必選引數和可選引數
function fun1($str1,$str2='php'){
return $str1.' '.$str2;
}
echo fun1('hello'); //hello php
echo fun1('hello','world'); //hello world
?>
變數的作用域
<?php
#變數的作用域分為:區域性變數和全域性變數
#區域性變數又分為:動態變數和靜態變數
function test(){
$i=1; //區域性動態變數,函式執行完就釋放
$i++;
echo $i.'<br/>';
static $a=1; //區域性靜態變數,函式執行完儲存在靜態記憶體中
$a++;
echo $a.'<br/>';
}
test(); //2 2
test(); //2 3
test(); //2 4
$str1='php';
function test1(){
global $str1; //函式內不能直接呼叫全域性變數,如果要使用,進行global關鍵字實現
echo $str1; //php
}
test1();
?>
傳值和傳引用
<?php
#傳值在函式體內對變數更改不影響變數本身
#傳引用在函式體內對變數更改影響變數本身
$str1='php';
function test($str){
$str='hello';
echo $str; //hello
}
test($str1);
echo $str1; //php 直接傳值,不會影響原變數
function test1(&$str){
$str='hello';
echo $str; //hello
}
test1($str1);
echo $str1; //hello 傳引用,會影響變數本身
?>
變數函式
<?php
#將函式名稱賦值給變數,呼叫的時候通過變數名稱加上小括號的形式進行呼叫
$md51='md5';
echo $md51('admin'); //21232f297a57a5a743894a0e4a801fc3
function test(){
echo 'hello php';
}
$test1='test';
$test1(); //hello php
?>
回撥函式
<?php
#自定義回撥函式
function test($str){
echo 'hello '.$str;
}
function callback($call,$str1){
$call($str1);
}
callback('test','php'); //hello php 把函式當作引數傳遞
#使用call_user_func()進行呼叫
call_user_func('test','php'); //hello php
?>
遞迴函式
<?php
#函式自己呼叫本身
function test($i){
echo $i.'<br />';
$i++;
if($i<=10){ //遞迴函式一定要有結束條件
test($i);
}
}
test(1); //輸出1 2 3 4 5 6 7 8 9 10 和迴圈類似
?>
匿名函式
<?php
#匿名函式也叫閉包函式,允許臨時建立一個不指定名稱的函式
$test=function($str1){
echo 'hello '.$str1;
};
$test('php'); //匿名函式使用變數函式來進行呼叫 hello php
?>
可變引數
<?php
#func_num_args() 得到函式引數個數
#func_get_arg() 得到函式引數
#func_get_args() 得到函式引數陣列形式
function test(){
echo func_num_args(); //5
echo func_get_arg(1); //2 引數下標和陣列一樣,從0開始
$arr1=func_get_args(); //Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
foreach($arr1 as $key){
echo $key; //12345 得到每個引數值
}
};
test(1,2,3,4,'5');
?>
相關推薦
【9】WEB安全學習----PHP基礎語法二
目錄 二、陣列 建立陣列 使用陣列 多維陣列 遍歷陣列 陣列運算子 字串函式 數學函式 定義函式 函式的引數 變數函式 回撥函式 遞迴函式 匿名函式 可變引數 一、流程控制 1、IF語句 <
【45】WEB安全學習----JAVA基礎二
一、類與物件 1、構造方法 作用:可以通過構造方法實現例項化物件中的屬性初始化處理。若類中沒有自己定義構造方法,JAVA會預設提供一個無參、什麼都不做的構造方法。 定義:方法名稱必須和類名稱保持一致、不允許設定任何的返回值型別、是在使用關鍵字new例項化物件時自動呼叫。 構造方法過載
【44】WEB安全學習----JAVA基礎一
前言: 為什麼做滲透測試需要學習JAVA?自己的見解: 1、目前國內大中型企業專案多數採用JAVAEE開發,而在日常安全服務工作中,百分之八十的專案也是JAVA所開發,所以需要學習JAVA(達到會分析會寫,而不是之前學習PHP那樣會分析就行,因為PHP的特性,所以用來打CTF的挺多)。
【43】WEB安全學習----PHP-ThinkPHP框架2
模板常量替換機制 __MODULE__:表示從域名後面開始一直到分組名結束的路由 __CONTROLLER__:表示從域名後面開始一直到控制器結束的路由 __ACTION__:表示從域名後面開始一直到方法名結束的路由 __PUBLIC__:站點根目錄下的public目錄路由 _
【42】WEB安全學習----PHP-ThinkPHP框架1
前言 前不久參加了一個CTF比賽,有一道題是PHP程式碼審計,採用框架進行開發,因為從沒有接觸過框架學習,故找到了漏洞程式碼也不知道怎麼構造利用,悲慘之極,現在惡補下。 PHP框架 在PHP中,目前主流的框架有: Zend Framework:重量級框架,由PHP官方出品,因為功能較
【46】WEB安全學習----JAVA基礎三
一、String類 在JAVA中,String字串用雙引號引起來,字串嚴格來說就是字元的陣列集合: 在JDK1.8及以前,String類使用char []字元陣列儲存字串,而1.9及以上使用byte []位元組陣列儲存字串。 1、字串的比較: 字串如果用 "==" 進行比較,比較的是
【11】WEB安全學習----MYSQL1
目錄 2、表 4、主鍵 1、整數型 2、浮點型 四、建立表 1、建立表 單欄位主鍵 五、修改表 8、刪除表
【13】WEB安全學習----MYSQL-3
目錄 隱式轉換: 顯式轉換: IF 函式與操作符 一、型別轉換 隱式轉換: 當運算子與不同型別的運算元一起使用時,會發生型別轉換以使運算元相容。某些轉換是隱式發生的。例如,MySQL會根據需要自動將數字轉換為字串,反之亦然。
【19】WEB安全學習----MySQL注入-4
一、盲注介紹 開發人員一般禁用了所有的詳細錯誤訊息,如果發現了一個SQL注入點,但應用只提供了一個通用的錯誤頁面;或者返回正常頁面但沒有我們需要的內容在上面。這些都屬於SQL盲注,沒有錯誤訊息或反饋內容就不能使用之前的注入方法,而是採用SQL邏輯操作以位元組方式推斷資料來修
【27】WEB安全學習----SQL server注入
一、基礎知識 系統資料庫 master資料庫 master是SQL server最重要的資料庫,是整個資料庫的核心,使用者不能直接修改。裡面資料庫包括使用者的登陸資訊、使用者所在的組、所有系統的配置選項、伺服器中本地資料庫的名稱和資訊、初始化方式等。 model資
【28】WEB安全學習----SQL注入總結
檢測注入 不管什麼資料庫注入,檢測是否有注入點是第一步,而檢測的方法大同小異。 1、閉合SQL拼接語句 要想進行下一步注入,首先需要閉合SQL語句,如何知道閉合符號是什麼呢?可通過在引數後面加入單引號或雙引號使其整條SQL拼接語句失敗,從而可從資料庫報錯資訊得知,若沒有
【29】WEB安全學習----XML注入
一、XML基礎 簡介: XML:可擴充套件標記語言。XML被設計用來是傳輸和儲存資料,XML是一種“元標記”語言,開發者可以根據自己的需要建立標記的名稱。 XML結構 XML是一種樹結構,從“根部”開始,然後擴充套件到“枝葉”,XML文件必須有根元素。 <?x
【31】WEB安全學習----XPath注入
一、XPath簡介 XPath 是一門在 XML 文件中查詢資訊的語言。可以理解xml為資料庫,xpath就是查詢資料庫的SQL語言。 XPath 使用路徑表示式在 XML 文件中進行導航 XPath 包含一個標準函式庫 XPath 是 XSLT 中的主要元素 XP
【32】WEB安全學習----Json注入
一、Json簡介 JSON 是儲存和交換文字資訊的語法,是輕量級的文字資料交換格式。類似xml,但JSON 比 XML 更小、更快,更易解析。所以現在介面資料傳輸都採用json方式進行。JSON 文字的 MIME 型別是 "application/json"。 json語
【33】WEB安全學習----XSS攻擊1
關於XSS跨站指令碼攻擊有太多文章和教材提供了,本章就簡單介紹XSS攻擊原理,重點介紹XSS程式碼構造和繞過。 一、XSS攻擊原理 XSS攻擊:即跨站指令碼攻擊,是指攻擊者在網頁中嵌入客戶端JavaScript指令碼,當用戶使用瀏覽器瀏覽嵌入惡意程式碼的網頁時,惡意程式碼
【34】WEB安全學習----XSS攻擊2
一、JavaScript事件 在構造XSS程式碼時,如果對<>進行了編碼或過濾,那麼無法結束和新建HTML元素,此時可以用事件進行觸發(這裡不討論利用HTML標籤屬性值進行觸發,因為只支援少部分瀏覽器)。 JavaScript指令碼中的事件是指使用者載入目標頁
【36】WEB安全學習----CSRF攻擊
CSRF攻擊 關於CSRF攻擊,網上也有很多講解,這裡就不重複造輪子了。 簡單介紹下,CSRF攻擊也叫跨站點請求偽造攻擊,其核心攻擊原理是:在傳送請求時,瀏覽器會自動附帶使用者的cookie資料進行提交,那麼通過這個原理,攻擊者通過JS構造某些功能請求,如發帖,轉發、修改
【37】WEB安全學習----SSRF攻擊
一、攻擊原理 SSRF:服務端請求偽造,不要把它和CSRF(跨站點請求偽造)攻擊搞混了哦,CSRF利用的是客戶端請求,而SSRF利用的是伺服器端請求,這個是本質區別。 簡單來說,SSRF攻擊原理是伺服器端請求了來自客戶端構造的連結,這個是不是和CSRF攻擊類似呢,攻擊者構
【39】WEB安全學習----Jsonp跨域安全
同源策略 同源策略/SOP是一種約定,它是瀏覽器最核心也最基本的安全功能,所謂同源是指"協議+域名+埠"三者相同。 同源策略限制以下幾種行為: 1、Cookie、LocalStorage 和 IndexDB 無法讀取 2、DOM 和 Js物件無法獲得 3、AJA
【40】WEB安全學習----URL跳轉漏洞
URL跳轉漏洞/開放重定向漏洞 由於應用越來越多的需要和其他的第三方應用互動,以及在自身應用內部根據不同的邏輯將使用者引向到不同的頁面,如果實現不好就可能導致一些安全問題,特定條件下可能引起嚴重的安全漏洞。 對於URL跳轉的實現一般會有幾種實現方式: META