標籤:school 類型 參數 空格 sig 字元 程式 服務 文檔
這幾天要個同事寫php的程式,就開始學習了PHP ,基礎文法不用說了語言都是基本相通的,只是有若類型和強型別的區別(聲明資料類型)
把現在看到的感覺有用的記錄一下。
$_SERVER[‘PHP_SELF‘] 返回當前執行指令碼的檔案名稱。$_SERVER[‘GATEWAY_INTERFACE‘] 返回伺服器使用的 CGI 規範的版本。$_SERVER[‘SERVER_ADDR‘] 返回當前運行指令碼所在的伺服器的 IP 位址。$_SERVER[‘SERVER_NAME‘] 返回當前運行指令碼所在的伺服器的主機名稱(比如 www.w3school.com.cn)。$_SERVER[‘SERVER_SOFTWARE‘] 返回伺服器標識字串(比如 Apache/2.2.24)。$_SERVER[‘SERVER_PROTOCOL‘] 返回請求頁面時通訊協定的名稱和版本(例如,“HTTP/1.0”)。$_SERVER[‘REQUEST_METHOD‘] 返回訪問頁面使用的要求方法(例如 POST)。$_SERVER[‘REQUEST_TIME‘] 返回請求開始時的時間戳記(例如 1577687494)。$_SERVER[‘QUERY_STRING‘] 返回查詢字串,如果是通過查詢字串訪問此頁面。$_SERVER[‘HTTP_ACCEPT‘] 返回來自當前請求的要求標頭。$_SERVER[‘HTTP_ACCEPT_CHARSET‘] 返回來自當前請求的 Accept_Charset 頭( 例如 utf-8,ISO-8859-1)$_SERVER[‘HTTP_HOST‘] 返回來自當前請求的 Host 頭。$_SERVER[‘HTTP_REFERER‘] 返回當前頁面的完整 URL(不可靠,因為不是所有使用者代理程式都支援)。$_SERVER[‘HTTPS‘] 是否通過安全 HTTP 協議查詢指令碼。$_SERVER[‘REMOTE_ADDR‘] 返回瀏覽當前頁面的使用者的 IP 位址。$_SERVER[‘REMOTE_HOST‘] 返回瀏覽當前頁面的使用者的主機名稱。$_SERVER[‘REMOTE_PORT‘] 返回使用者機器上串連到 Web 服務器所使用的連接埠號碼。$_SERVER[‘SCRIPT_FILENAME‘] 返回當前執行指令碼的絕對路徑。$_SERVER[‘SERVER_ADMIN‘] 該值指明了 Apache 伺服器設定檔中的 SERVER_ADMIN 參數。$_SERVER[‘SERVER_PORT‘] Web 服務器使用的連接埠。預設值為 “80”。$_SERVER[‘SERVER_SIGNATURE‘] 返回伺服器版本和虛擬機器主機名。$_SERVER[‘PATH_TRANSLATED‘] 當前指令碼所在檔案系統(非主目錄)的基本路徑。$_SERVER[‘SCRIPT_NAME‘] 返回當前指令碼的路徑。$_SERVER[‘SCRIPT_URI‘] 返回當前頁面的 URI。
在使用$_SERVER["PHP_SELF"]很容易攻擊者造成反射型XSS,
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
正常會轉化為:
<form method="post" action="test_form.php">
駭客在URL中輸入:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert(‘hacked‘)%3C/script%3E
這樣PHP擷取會變成:
<form method="post" action="test_form.php"/><script>alert(‘hacked‘)</script>
解決辦法:
使用
htmlspecialchars()
什麼是 htmlspecialchars() 函數?
htmlspecialchars() 函數把特殊字元轉換為 HTML 實體。這意味著 < 和 > 之類的 HTML 字元會被替換為 < 和 > 。這樣可防止攻擊者通過在表單中注入 HTML 或 JavaScript 代碼(跨網站指令碼攻擊)對代碼進行利用。
在使用者提交該表單時,我們還要做兩件事:
- (通過 PHP trim() 函數)去除使用者輸入資料中不必要的字元(多餘的空格、定位字元、換行)
- (通過 PHP stripslashes() 函數)刪除使用者輸入資料中的反斜線(\)
PHP入門【一】$_SERVER