PHP漏洞全解(四)-xss跨站腳本攻擊
XSS(Cross Site Scripting),意為跨網(wǎng)站腳本攻擊,為了和樣式表css(Cascading Style Sheet)區(qū)別,縮寫(xiě)為XSS
跨站腳本主要被攻擊者利用來(lái)讀取網(wǎng)站用戶(hù)的cookies或者其他個(gè)人數(shù)據(jù),一旦攻擊者得到這些數(shù)據(jù),那么他就可以偽裝成此用戶(hù)來(lái)登錄網(wǎng)站,獲得此用戶(hù)的權(quán)限。
跨站腳本攻擊的一般步驟:
1、攻擊者以某種方式發(fā)送xss的http鏈接給目標(biāo)用戶(hù)
2、目標(biāo)用戶(hù)登錄此網(wǎng)站,在登陸期間打開(kāi)了攻擊者發(fā)送的xss鏈接
3、網(wǎng)站執(zhí)行了此xss攻擊腳本
4、目標(biāo)用戶(hù)頁(yè)面跳轉(zhuǎn)到攻擊者的網(wǎng)站,攻擊者取得了目標(biāo)用戶(hù)的信息
5、攻擊者使用目標(biāo)用戶(hù)的信息登錄網(wǎng)站,完成攻擊
當(dāng)有存在跨站漏洞的程序出現(xiàn)的時(shí)候,攻擊者可以構(gòu)造類(lèi)似 http://www.sectop.com/search.php?key=> ,誘騙用戶(hù)點(diǎn)擊后,可以獲取用戶(hù)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ǔ)句
$_SERVER["PHP_SELF"]變量的值為當(dāng)前頁(yè)面名稱(chēng)
例:
get.php中上述的表單
那么我們提交
http://www.sectop.com/get.php/">>
那么表單變成