PHP如何防止XSS攻擊與XSS攻擊原理的講解
XSS又稱CSS,全稱Cross SiteScript(跨站腳本攻擊), XSS攻擊類似于SQL注入攻擊,是Web程序中常見的漏洞,XSS屬于被動式且用于客戶端的攻擊方式,所以容易被忽略其危害性。其原理是攻擊者向有XSS漏洞的網站中輸入(傳入)惡意的HTML代碼,當用戶瀏覽該網站時,這段HTML代碼會自動執(zhí)行,從而達到攻擊的目的。如,盜取用戶Cookie信息、破壞頁面結構、重定向到其它網站等。
理論上,只要存在能提供輸入的表單并且沒做安全過濾或過濾不徹底,都有可能存在XSS漏洞。
下面是一些最簡單并且比較常見的惡意字符XSS輸入:
1.XSS 輸入通常包含 JavaScript 腳本,如彈出惡意警告框:<script>alert("XSS");</script>
2.XSS 輸入也可能是 HTML 代碼段,譬如:
- (1).網頁不停地刷新
<meta http-equiv="refresh" content="0;">
- (2).嵌入其它網站的鏈接
<iframe src=http://xxxx width=250 height=250></iframe>
除了通過正常途徑輸入XSS攻擊字符外,還可以繞過JavaScript校驗,通過修改請求達到XSS攻擊的目的,如下圖:
了解到XSS攻擊的原理和危害后,其實要預防也不難,下面提供一個簡單的PHP防止XSS攻擊的函數(shù):
<?PHP /** * @param $string * @param $low 安全別級低 */ function clean_xss(&$string, $low = False) { if (! is_array ( $string )) { $string = trim ( $string ); $string = strip_tags ( $string ); $string = htmlspecialchars ( $string ); if ($low) { return True; } $string = str_replace ( array ('"', "\\", "'", "/", "..", "../", "./", "http://" ), '', $string ); $no = '/%0[0-8bcef]/'; $string = preg_replace ( $no, '', $string ); $no = '/%1[0-9a-f]/'; $string = preg_replace ( $no, '', $string ); $no = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S'; $string = preg_replace ( $no, '', $string ); return True; } $keys = array_keys ( $string ); foreach ( $keys as $key ) { clean_xss ( $string [$key] ); } } //just a test $str = 'codetc.com<meta http-equiv="refresh" content="0;">'; clean_xss($str); //如果你把這個注釋掉,你就知道xss攻擊的厲害了 echo $str; ?>
PHP中的設置
PHP5.2以上版本已支持HttpOnly
參數(shù)的設置,同樣也支持全局的HttpOnly的設置,在php.ini中
----------------------------------------------------- session.cookie_httponly = -----------------------------------------------------
設置其值為1或者TRUE,來開啟全局的Cookie的HttpOnly屬性,當然也支持在代碼中來開啟:
<?php ini_set("session.cookie_httponly", 1); // or session_set_cookie_params(0, NULL, NULL, NULL, TRUE); ?>
Cookie操作函數(shù)setcookie函數(shù)和setrawcookie函數(shù)也專門添加了第7個參數(shù)來做為HttpOnly的選項,開啟方法為:
<?php setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); ?>
老版本的PHP就不說了。沒企業(yè)用了吧。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
相關文章
如何使用PHP實現(xiàn)javascript的escape和unescape函數(shù)
本篇文章是對使用PHP實現(xiàn)javascript的escape和unescape函數(shù)的方法進行了詳細的分析介紹,需要的朋友參考下2013-06-06PHP實現(xiàn)生成數(shù)據(jù)字典功能示例
這篇文章主要介紹了PHP實現(xiàn)生成數(shù)據(jù)字典功能,涉及php針對mysql常見的連接、數(shù)據(jù)表查詢、遍歷、table表格構成等相關操作技巧,需要的朋友可以參考下2018-05-05PHP實現(xiàn)二維數(shù)組(或多維數(shù)組)轉換成一維數(shù)組的常見方法總結
這篇文章主要介紹了PHP實現(xiàn)二維數(shù)組(或多維數(shù)組)轉換成一維數(shù)組的常見方法,結合實例形式總結分析了PHP數(shù)組遍歷、轉換所涉及的array_reduce、array_walk_recursive及array_map函數(shù)常見使用技巧,需要的朋友可以參考下2019-12-12