💉PHP用户可控输入速查表

来自用户可控的输入

变量/常量/函数/等描述

$_SERVER

包含 服务器信息 环境变量 用户传入的http头和uri路径等信息

$_GET $HTTP_GET_VARS

包含 用户传入的URL参数

$_POST $HTTP_POST_VARS

包含 用户传入的POST BODY的参数 (当 HTTP头中Content-Type 值为 application/x-www-form-urlencoded 或 multipart/form-data时才会被传入)

$_FILES $HTTP_POST_FILES

包含 用户上传文件信息 文件内容 原文件名 临时文件名 大小 等信息

$_COOKIE $HTTP_COOKIE_VARS

包含 用户传入的HTTP头中的Cookies kv值

$_REQUEST

同时包含 $_GET $_POST $_COOKIE

php://input $HTTP_RAW_POST_DATA

包含 用户POST请求中BODY 的完整数据 常见用法 file_get_contents('php://input');

apache_request_headers() getallheaders()

包含 用户传入的http头 (Apache ONLY)

下方为PHP框架常见输入

Request::instance()->get(); input('get.'); input('变量类型.变量名/修饰符') 详见官方文档

获取用户传入的URL参数 可用过滤器和类型转换 THINKPHP框架5 例子:获取url参数中的id值 Request::instance()->get('id'); 调用时如不传入参数默认获取全部 Request::instance()->get(); input('get.id'); 调用时如传入get.则获取全部 input('get.'); input('get.id/d');// 强制变量转换为整型 Request::instance()->get('name','','htmlspecialchars'); //过滤器 input('get.name/s');// 强制转换变量为字符串 input('get.ids/a');// 强制变量转换为数组 默认为/s

Request::instance()->post(); input('post.');

获取用户传入的POST参数 THINKPHP框架5 例子:获取post请求body中的name值 Request::instance()->post('name'); input('post.name'); 同get

Request::instance()-> param(); input('param.'); input('');

自动判断用户提交方法(POST GET PUT)获取参数 THINKPHP框架5 用法同get 除此之外 可直接调用input('');获取全部参数 或使用 input('name');获取单个参数 注:input方法默认获取param

Request::instance()->request(); input('request.');

用法同get 获取$_REQUEST 变量 THINKPHP框架5

Request::instance()->server(); input('server.');

用法同get 获取$_SERVER 变量THINKPHP框架5

Request::instance()->cookie(); input('cookie.'); Cookie::get('name'); cookie('name');

用法同get 获取$_COOKIE 变量THINKPHP框架5

Request::instance()->header(); input('header.');

用法同get 获取用户传入的HTTP头THINKPHP框架5

Request::instance()->file();

用法同get 获取$_FILES 变量THINKPHP框架5

I('变量类型.变量名/修饰符',['默认值'],['过滤方法或正则'])

获取变量 THINKPHP框架3.* 例子 I('get.id'); I('get.'); 使用方法同input

request();

实例化request对象THINKPHP框架5 例$req=request();

相当于$req=Request::instance()

这种使用方法比较常见 还可以获取用户传入的请求信息 可将前面的Request::instance()直接替换成request() 例 request()->post();

{$Request.变量类型.变量名}

THINKPHP框架 在模板中获取参数

路由传入值 (Action参数绑定)

namespace Home\Controller;

use Think\Controller;

class BlogController extends Controller

{

public function read($id)

{ echo 'id='.$id; }

public function archive($year='2013',$month='01')

{echo 'year='.$year.'&month='.$month;}}

THINKPHP框架 (Action参数绑定)

通过路由传入

/index.php/Home/Blog/read/id/5 /index.php/Home/Blog/archive/year/2013/month/11 ?c=Blog&a=read&id=5

?c=Blog&a=archive&year=2013&month=11

来自 <https://www.kancloud.cn/manual/thinkphp/1715>

Request::instance() 其他用户变量

https://www.kancloud.cn/manual/thinkphp5/158834 THINKPHP框架5 见官方文档 略

$this->input->post() $this->input->get() $this->input->cookie() $this->input->server() $this->input->user_agent(); $this->input->request_headers(); $this->input->get_request_header('some-header', TRUE); $this->input->ip_address(); $this->input->raw_input_stream; $this->input->input_stream('key'); (POST BODY)

Codeigniter2/3框架 $this->input->input_stream('key', TRUE); // XSS 过滤器开关 $this->input->cookie('some_cookie'); 3.*官方文档 2.*官方文档 文件上传 https://codeigniter.org.cn/userguide2/libraries/file_uploading.html https://codeigniter.org.cn/userguide3/libraries/file_uploading.html?highlight=%E6%96%87%E4%BB%B6#id5

$request->getGet() $request->getPost() $request->getServer() $request->getCookie() $request->getPostGet()- 先 $_POST, 后 $_GET $request->getGetPost()- 先 $_GET, 后 $_POST $request->getJSON(); $this->request->getFiles(); $this->request->getFile('123'); 获取post body json数据 $request->getRawInput() 同php://input

$this->request->getQuery('page'); (GET参数) $this->request->getQueryParams(); 全部get参数 $this->request->getData('title'); (POST 参数) $this->request->getParsedBody(); 全部post参数 $this->request->getUploadedFile('attachment'); $jsonData=$this->request->input('json_decode'); $request->getUploadedFiles(); $data=$this->request->input('Cake\Utility\Xml::build',['return'=>'domdocument']); $userAgent=$this->request->getHeaderLine('User-Agent');// Get an array of all values.$acceptHeader=$this->request->getHeader('Accept'); $this->request->getCookie('remember_me');

$request= Yii::$app->request;

$get= $request->get(); // 等价于: $get = $_GET;

$id= $request->get('id'); // 等价于: $id = isset($_GET['id']) ? $_GET['id'] : null;

$id= $request->get('id', 1); // 等价于: $id = isset($_GET['id']) ? $_GET['id'] : 1;

$post= $request->post(); // 等价于: $post = $_POST;

$name= $request->post('name'); // 等价于: $name = isset($_POST['name']) ? $_POST['name'] : null;

$name= $request->post('name', ''); // 等价于: $name = isset($_POST['name']) ? $_POST['name'] : '';

$request= Yii::$app->request; // 返回所有参数

$params= $request->bodyParams; // 返回参数 "id"

$param= $request->getBodyParam('id'); // $headers 是一个 yii\web\HeaderCollection 对象

$headers= Yii::$app->request->headers; // 返回 Accept header 值

$accept= $headers->get('Accept'); if($headers->has('User-Agent')) { /* 这是一个 User-Agent 头 */}

$userHost= Yii::$app->request->userHost; $userIP= Yii::$app->request->userIP; 来自 <https://www.yiichina.com/doc/guide/2.0/runtime-requests>

Yii 2.0框架

$name=$request->input('name'); 所有请求

$name=$request->query('name'); get url参数

$query=$request->query(); $value=$request->cookie('name'); Use Illuminate\Support\Facades\Cookie;

$value=Cookie::get('name'); $file=$request->file('photo'); $file=$request->photo; 来自 <https://learnku.com/docs/laravel/8.x/requests/9369>

Laravel 框架

最后更新于