所有的外部输入参数都应该检查合法性。

未正确处理输入数据将可能导致sql注入等漏洞。

框架提供系列函数来取$_REQUEST中的值

requestInt

requestString

requestFloat

requestBool

ps:注意$_REQUEST中变量类型可能会是数组

如请求为 ?i[]=1,那么$_REQUEST['i'] 的值为array(1)

做校验的时候要考虑全面以防止php warning信息泄露

另外再介绍一下kv json格式的数据校验。

有时为了在项目中保留一定扩展性,会使用json格式的数据,这种数据又该如何校验呢。

//校验键值形式{k1:v1, k2:v2, k3:v3 ...}的json数据,可以对每一对kv进行校验

requestKvJson

部分实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//校验整数,失败返回$default
function checkInt($var$default = 0) {
    return  is_numeric($var) ? intval($var, (strncasecmp($var'0x', 2) == 0 || strncasecmp($var'-0x', 3) == 0) ? 16 : 10) : $default;
}
 
//校验字符串 $check为正则表达式
function checkString($var$check ''$default '') {
    if (!is_string($var)) {
        if(is_numeric($var)) {
            $var = (string)$var;
        }
        else {
            return $default;
        }
    }
    if ($check) {
         return (preg_match($check$var$ret) ? $ret[1] : $default);
    }
 
    return $var;
}
 
/*
    校验kv json,
    如果想要一个这样的数据{id:1, 'type':'single_text', 'required': true, 'desc':'this is a text'}
    那么$desc可以这样写
    array(
   array('id', 'Int'),
   array('type', 'string', PATTERN_NORMAL_STRING),
   array('required', 'Bool', false),
   array('desc', 'string', PATTERN_NORMAL_STRING),
))
*/
function checkKvJson($var$desc array()) {
    if(is_string($var)) {
        $var = json_decode($var, true);
    }
    if(!$var || !is_array($var)) {
        return array();
    }
 
    if($desc)
    foreach($desc as $d) {
 
        if(!isset($var[$d[0]])) {
            return array();
        }
 
        $ps array_slice($d, 2);
        array_unshift($ps$var[$d[0]]);
        $var[$d[0]] = call_user_func_array('check'.$d[1], $ps);
        if($var[$d[0]] === false && strcasecmp($d[1], 'Bool')) {
            return array();
        }
    }
 
    return $var;
}

如何实现一个php框架系列文章【5】安全处理输入的更多相关文章

  1. 如何实现一个php框架系列文章【开篇】

    1.本系列文章的目的 实现一个小而美的产品级别php框架 自己动手实现一个新框架仅用于学习交流,不打算替代市面上现有的其他主流框架. 2. 我要一个怎样的PHP框架 简单实用,安全优雅,博采众长 安装 ...

  2. 如何实现一个php框架系列文章【1】如何组织文件

    1. 组织文件布局应该考虑什么问题 前后端分离 各业务模块分离但方便互相调用 上传文件安全性 方便接入第三方类库 如图所示 框架入口文件 uct/index.php 框架目录         uct/ ...

  3. 如何实现一个php框架系列文章【6】mysql数据库

    实现一个mysql数据库封装需要考虑的问题 使用方便性 采用直接sql语句操作方式.只要会写sql语句,那么将没有其他学习成本. uctphp框架提供的dba辅助封装类,用会之后将爱不释手. 使用前需 ...

  4. 如何实现一个php框架系列文章【4】url路由管理

    直接通过url参数访问业务模块($app)中控制器($ctl)里的函数($act) 我们支持3种路由模式 普通模式 _a=$app,     _u=$ctl.$act 最简单的方式,专注实现业务$ac ...

  5. 如何实现一个php框架系列文章【2】实现类的自动加载

    根据前一篇文章的设计原则,我们暂时把php文件分为3类,类名和文件名都遵守如下约定.   类名 文件名 路径 模型类m {$app}Mod  {$app}.mod.php {$app}/model   ...

  6. 如何实现一个php框架系列文章【3】支持psr4的自动加载类

    psr4自动加载规范https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md 我们把第三方使用psr规范的类库放在v ...

  7. 2019 年起如何开始学习 ABP 框架系列文章-开篇有益

    2019 年起如何开始学习 ABP 框架系列文章-开篇有益 [[TOC]] 本系列文章推荐阅读地址为:52ABP 开发文档 https://www.52abp.com/Wiki/52abp/lates ...

  8. 【开源】EFW框架系列文章索引

    开源轻量级.Net框架EnterpriseFrameWork详解 ——自己动手写框架 ——适合中小企业的开发框架 ——Ajax+JqueryEasyUI+NotNetBar+MVC+WebServic ...

  9. 从零开始编写自己的C#框架 ---- 系列文章

    目录: 从零开始编写自己的C#框架(1)——前言从零开始编写自己的C#框架(2)——开发前的准备工作从零开始编写自己的C#框架(3)——开发规范从零开始编写自己的C#框架(4)——文档编写说明从零开始 ...

随机推荐

  1. 快速了解微信小程序的使用,一个根据小程序的框架开发的todos app

    微信官方已经开放微信小程序的官方文档和开发者工具.前两天都是在看相关的新闻来了解小程序该如何开发,这两天官方的文档出来之后,赶紧翻看了几眼,重点了解了一下文档中框架与组件这两个部分,然后根据简易教程, ...

  2. BPM应用开发解决方案分享

    一.需求分析企业整体管理是一个完整的体系,如果 把这个体系比做一个拼图,企业信息化通过各个业务系统覆盖了一部分业务. 企业通过采购实施通用软件的方式,覆盖了企业的核心业务和专业化业务然而系统只满足了部 ...

  3. SQL Server常见问题介绍及快速解决建议

    前言 本文旨在帮助SQL Server数据库的使用人员了解常见的问题,及快速解决这些问题.这些问题是数据库的常规管理问题,对于很多对数据库没有深入了解的朋友提供一个大概的常见问题框架. 下面一些问题是 ...

  4. javaMail

    JavaMail概述:        JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类.但它并没有包含在JDK中,而是作为JavaEE的一部分. javaMai ...

  5. python 常用第三方模块

    除了内建的模块外,Python还有大量的第三方模块. 基本上,所有的第三方模块都会在https://pypi.python.org/pypi上注册,只要找到对应的模块名字,即可用pip安装. 本章介绍 ...

  6. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  7. 前端构建大法 Gulp 系列 (一):为什么需要前端构建

    系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...

  8. 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  9. CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#)

    CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#) 效果图 本文解决了将OpenGL渲染出来的内容保存到PNG图片的方法. 下载 CSharpGL已在GitHub开 ...

  10. 轻量级表达式树解析框架Faller

    有话说 之前我写了3篇关于表达式树解析的文章 干货!表达式树解析"框架"(1) 干货!表达式树解析"框架"(2) 干货!表达式树解析"框架" ...