当前位置:   article > 正文

PHP - cookie、session、exception、过滤器、JSON等_php json注入漏洞如何过滤

php json注入漏洞如何过滤

多维数组

一个数组中的值可以是另一个数组,另一个数组的值也可以是一个数组。
多维数组是包含一个或多个数组的数组。
在多维数组中,主数组中的每一个元素也可以是一个数组,子数组中的每一个元素也可以是一个数组。

PHP date() 函数

可把时间戳格式化为可读性更好的日期和时间。

string date ( string $format [, int $timestamp ] )

在这里插入图片描述
date() 函数的第一个必需参数 format 规定了如何格式化日期/时间。

这里列出了一些可用的字符:

  • d - 代表月中的天 (01 - 31)
  • m - 代表月 (01 - 12)
  • Y - 代表年 (四位数)
    在这里插入图片描述
    输出为:
    2019/10/08
    2019.10.08
    2019-10-08

包含文件

include 和 require 语句
include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:

  • require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
  • include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。
    假设您有一个标准的页头文件,名为 “header.php”。如需在页面中引用这个页头文件,请使用 include/require:
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>

<?php include 'header.php'; ?>
<h1>欢迎来到我的主页!</h1>
<p>一些文本。</p>

</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

文件处理

打开文件

fopen(要打开的文件的名称,规定了使用哪种模式来打开文件) 函数用于在 PHP 中打开文件。
打开模式有以下几种
在这里插入图片描述
**注释:如果 fopen() 函数无法打开指定文件,则返回 0 (false)。

关闭文件

fclose() 函数用于关闭打开的文件

检测文件末尾(EOF)

feof() 函数检测是否已到达文件末尾(EOF)。
在循环遍历未知长度的数据时,feof() 函数很有用。
**注释:在 w 、a 和 x 模式下,您无法读取打开的文件!

if (feof($file)) echo "文件结尾";
  • 1
逐行读取文件

fgets() 函数用于从文件中逐行读取文件。
** 注释:在调用该函数之后,文件指针会移动到下一行。

逐字符读取文件

fgetc() 函数用于从文件中逐字符地读取文件。
** 注释:在调用该函数之后,文件指针会移动到下一个字符。

文件上传

参考菜鸟教程https://www.runoob.com/php/php-file-upload.html

Cookie

cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP能够创建并取回 cookie 的值。

  • 如何创建 Cookie?
    setcookie() 函数用于设置 cookie。
    ** 注释:setcookie() 函数必须位于 标签之前。在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码。
    (为防止 URL 编码,请使用 setrawcookie() 取而代之。)

setcookie(name, value, expire, path, domain);

  • 如何取回 Cookie 的值?
    $_COOKIE(cookie变量名) 变量用于取回 cookie 的值。
    使用 isset() 函数来确认是否已设置了 cookie

  • 如何删除 Cookie?
    使过期日期变更为过去的时间点

<?php
// 设置 cookie 过期时间为过去 1 小时
setcookie("user", "", time()-3600);
?>
  • 1
  • 2
  • 3
  • 4
  • 如果浏览器不支持 Cookie 该怎么办?
    使用其他的办法在您的应用程序中的页面之间传递信息。
    通过表单传递数据。

Session

session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。

  • 开始 PHP Session
    首先必须启动会话。
    ** 注释:session_start() 函数必须位于 标签之前
<?php session_start(); ?>
<html>
	<body>
 		//content
	</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 存储 Session 变量
    存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量。
<?php
session_start();
// 存储 session 数据
$_SESSION['views']=1;
?>

<?php
// 检索 session 数据
echo "浏览量:". $_SESSION['views'];
?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 销毁 Session
    删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。
    unset() 函数用于释放指定的 session 变量;通过调用 session_destroy() 函数彻底销毁 session。
    ** 注释:session_destroy() 将重置 session,您将失去所有已存储的 session 数据。

发送电子邮件

mail() 函数

用于从脚本中发送电子邮件。

mail(to,subject,message,headers,parameters)

在这里插入图片描述
** PHP 运行邮件函数需要一个已安装且正在运行的邮件系统(如:sendmail、postfix、qmail等)。所用的程序通过在 php.ini 文件中的配置设置进行定义。

防止 E-mail 注入

防止 e-mail 注入的最好方法是对输入进行验证。

错误处理

不同的错误处理方法:

  • 简单的 “die()” 语句
  • 自定义错误和错误触发器
  • 错误报告

异常处理

异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。
当异常被触发时,通常会发生:

  • 当前代码状态被保存
  • 代码执行被切换到预定义(自定义)的异常处理器函数
  • 根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本

不同的错误处理方法:

  • 异常的基本使用
  • 创建自定义的异常处理器
  • 多个异常
  • 重新抛出异常
  • 设置顶层异常处理器

** 异常应该仅仅在错误情况下使用,而不应该用于在一个指定的点跳转到代码的另一个位置。

当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 “catch” 代码块。

如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 “Uncaught Exception” (未捕获异常)的错误消息。

适当的处理异常代码应该包括:

  • Try - 使用异常的函数应该位于 “try” 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
  • Throw - 里规定如何触发异常。每一个 “throw” 必须对应至少一个 “catch”。
  • Catch - “catch” 代码块会捕获异常,并创建一个包含异常信息的对象。

** 每个 throw 必须对应一个 catch

异常的规则

需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。

  • 每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。
  • 使用多个 catch 代码块可以捕获不同种类的异常。
  • 可以在 try 代码块内的 catch 代码块中抛出(再次抛出)异常。

简而言之:如果抛出了异常,就必须捕获它。

过滤器

PHP 过滤器用于验证和过滤来自非安全来源的数据。
测试、验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。
PHP 的过滤器扩展的设计目的是使数据过滤更轻松快捷。

输入过滤是最重要的应用程序安全课题之一。

什么是外部数据?

来自表单的输入数据
Cookies
Web services data
服务器变量
数据库查询结果

过滤器函数

  • filter_var() - 通过一个指定的过滤器来过滤单一的变量
  • filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
  • filter_input - 获取一个输入变量,并对它进行过滤
  • filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤

有两种过滤器:

Validating 过滤器:

  • 用于验证用户输入
  • 严格的格式规则(比如 URL 或 E-Mail 验证)
  • 如果成功则返回预期的类型,如果失败则返回 FALSE

Sanitizing 过滤器:

  • 用于允许或禁止字符串中指定的字符
  • 无数据格式规则
  • 始终返回字符串

选项和标志用于向指定的过滤器添加额外的过滤选项。

JSON

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/269670
推荐阅读