php特性

简介: 本文介绍了PHP的一些特性与安全问题。在Windows系统中,`index.php.`与`index.php`等效,但Linux系统不支持。HTTP协议在Windows下对`http://`和`http:\\\\`处理相同。PHP中可以通过`$_GET['$work']`获取变量,使用data协议如`data://text/plain;base64;64编码的内容`传输数据,或用`php://filter`过滤查看文件源码。

php特性

Windows系统中index.php.等同于index.php Linux系统不行
Windows中 http:// http:\\都一样

c=_GET['$work'] a=‘hello,world’ b=''

?work=hhello,worldello,word;

(get 数据流)?abc=data://text/plain;base64;64编码的内容 data协议

file=php://filter/convert.base64-encode/resource=flag.php filter协议查看flag.php的源码

两个操作都要执行时用&

php://filter/iconv.UCS-4.UCS-2/resourse=flag.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。

phpXSS

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

现在,如果用户进入的是地址栏中正常的 URL:"http://www.example.com/test_form.php",上面的代码会转换为:

<form method="post" action="test_form.php">

到目前,一切正常。

不过,如果用户在地址栏中键入了如下 URL:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

在这种情况下,上面的代码会转换为:

test_form.php/"><script>alert('hacked')</script>
<form method="post" action="test_form.php"/><script>alert('hacked')</script>

这段代码加入了一段脚本和一个提示命令。并且当此页面加载后,就会执行 JavaScript 代码(用户会看到一个提示框)。这仅仅是一个关于 PHP_SELF 变量如何被利用的简单无害案例。

<?php
// 定义变量并设置为空值
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
   
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}

function test_input($data) {
   
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>
目录
相关文章
|
10月前
|
Unix PHP C语言
给PHP7.4编写扩展
给PHP7.4编写扩展
82 0
|
10月前
|
存储 网络协议 JavaScript
|
PHP
php-rdkafka扩展安装
编译方式安装
317 0
|
存储 JavaScript 前端开发
PHP特性
PHP特性
112 0
PHP特性
|
PHP
跟我一起学PHP从基础开始(一)
跟我一起学PHP从基础开始(一)
78 0
|
机器学习/深度学习 Arthas 监控
Deliverer 1.0.8 支持 PHP5 了
因为是为了解决祖传代码的问题,也听到群友的一些声音,还是很有必要支持下 PHP5 的,所以这段时间一直在着力解决这个版本兼容问题,没想到问题比较我预计的要难很多。
|
API PHP C语言
php7安装igbinary扩展
php7安装igbinary扩展
798 0