💉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
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');
Cakephp 4.* 框架 文件上传 https://book.cakephp.org/4/en/controllers/request-response.html#file-uploads
$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 框架