首页 > 代码库 > PHP入门【一】$_SERVER

PHP入门【一】$_SERVER

这几天要个同事写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 字符会被替换为 &lt; 和 &gt; 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。

在用户提交该表单时,我们还要做两件事:

  1. (通过 PHP trim() 函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行)
  2. (通过 PHP stripslashes() 函数)删除用户输入数据中的反斜杠(\)

PHP入门【一】$_SERVER