ThinkPHP框架总结之安全及使用

ThinkPHP框架总结之安全及使用:

 

本片文章主要总结和介绍了使用TP过程中,加强项目安全的一些办法,具体是以例子为导向验证演示。

 

防止SQL注入:

针对WEB应用,防止SQL注入是首要考虑的安全问题,通常的安全隐患在于查询条件使用字符串参数,而且其中一些参数依赖于客户端输入,为了有效防止SQL注入,这里建议:

1、查询条件尽量使用数组方式,具体如下:

数组方式:

$wheres = array();

$wheres['account'] = $account;

$wheres['password'] = $password;

$User->where($wheres)->find();

2、如果必须使用字符串,那么建议使用预处理机制,具体如下:

$User = D('UserInfo');

$User->where('account="%s" andpassword="%s"',array($account,$password))->find();

3、可以使用PDO方式(绑定参数),因为这里未使用PDO,所以不罗列,感兴趣的读者可查询资料了解验证。

 

表单令牌验证:

TP框架支持对表单进行令牌验证功能,可以有效防止重复提交表单等安全问题。

 

1、如何启用表单令牌验证(默认是关闭的)

配置参数:

/* 表单令牌 */

    'TOKEN_ON' => true,// 是否开启令牌验证

     'TOKEN_NAME' => '__hash__', // 令牌验证的表单隐藏字段名称

     'TOKEN_TYPE' => 'md5', // 令牌哈希验证规则默认为MD5

     'TOKEN_RESET' => true// 令牌验证出错后是否重置令牌默认为true

这代表已经打开了表单令牌验证的开关,具体可查看注释说明。此时系统会自动在带有表单请求的模版文件中自动生成以TOKEN_NAME为名字的隐藏域,它的值是以TOKEN_TYPE规则的哈希字符串,用来实现表单的令牌验证。

注意:

如果模版文件中有多个表单,建议添加标志,只为需要验证的表单进行验证,如果不希望在某个页面表单验证,那么可以在控制器方法的输出语句前添加关闭验证表单命令:

C(“TOKEN_ON”,false);

$this->display();

2、表单令牌行为绑定

我的项目应用配置目录下,新建一tags.php文件,其中内容如下:

<?php

 return array(

           // 静态缓存写入时(行为绑定)

           'view_filter' => array('Behavior\TokenBuild'),

           // 如果是3.2.1以上版本需要改成

           // 'view_filter' =>array('Behavior\TokenBuildBehavior'),

 );

 ?>

存放位置:Project/Common/Conf/tags.php,代表执行到view_filter标签时执行表单令牌验证功能。

 

前端输入过滤:

客户端提交的数据存在不安全性,所以TP后台接口必须对提交的数据进行过滤,下面提供几点建议:

1、使用系统建议的I函数获得用户输入数据

2、开启表单令牌验证功能,如上表单令牌使用介绍

3、使用安全过滤函数,例如:stripslashes,htmlentities及strips_tags等

 

使用I函数过滤:

默认全局过滤->

/* 输入过滤 */

'DEFAULT_FILTER'=> 'strip_tags,stripslashes', // 全局的I函数过滤规则多个

个别数据过滤->

$account = I('post.account','','strip_tags');     // strip_tags过滤$_POST['account']

$password = I('post.password','','stripslashes'); // stripslashes过滤$_POST['password']

 

写入数据过滤:

如果没有使用I函数对数据过滤,那么可以在模型插入数据时过滤,具体如下:

$this->data($data)->filter('strip_tags')->add();

 

目录文件安全:

由于某些服务器开启了目录浏览权限,所以任何人都可以直接在浏览器中打开并访问对应目录,当然,系统默认开启了目录文件安全机制,会在自动生成目录时生成index.html空文件(默认名字,可以使用预定义语句:define(‘DIR_SECURE_FILENAME)’,’default.html’)设置名称),另外,还支持多个安全文件写入,用来满足不同服务器部署的要求(define(‘DIR_SECURE_FILENAME’,’index.html,index.htm’))。

注意:默认生成的安全文件中的内容为空字符串,我们可以设定默认的值,使用预定义语句:define(‘DIR_SECURE_CONTENT’,’Hello Secure file!’)。

 

表单合法性检测:

处理表单提交数据时,我们建议使用Think\Model类中的create方法创建数据对象,因为使用该方法时,系统会对数据的合法性进行检查。

1、配置insertFields和updateFields属性

class UserInfoModelextends Model {

     // 数据表名字

     protected $tureTableName ='user_info';

    

     // 配置插入和修改的字段匹配设置(针对表单)

     protected $insertFields =array('account','nickname','mobile');

     protected $updateFields =array('nickname','mobile');

}

上面的定义之后,当我们使用了create方法创建数据对象后,再使用add方法插入数据时,只会插入上面配置的几个字段的值(更新类同),具体如下:

接口代码:

// 用户注册(示意性接口:插入)

     public function register() {

          // ...

          // 使用Modelcreate函数更安全

          $User= D('UserInfo');

          $User->create();

          $ID= $User->add();

          if($ID) {

               $result= $User->where('id=%d',array($ID))->find();

               echo json_encode($result);

          }

          // ...

     }

 

返回结果:

 

2、使用field方法直接处理

// 插入

M('User')->field('account,nickname,mobile')->create();

// 更新

M('User')->field('nickname,mobile’)->create();

 

上传文件安全:

Web网站上传文件存在安全隐患,所以需要对其进行安全检查和设置。系统TP提供的Think\Upload提供了对文件的类型、后缀、大小及上传文件的合法进行了检查,那么接下来需要确认相关的配置已经到位(后面总结文件上传时会详细介绍)。

 

 

防止XSS攻击:

XSS,跨站脚本攻击,可用于窃取其他用户的Cookie信息,要避免此类问题,可以采用如下解决方案:

• 直接过滤所有的JavaScript脚本;

• 转义Html元字符,使用htmlentities、htmlspecialchars等函数;

• 系统的扩展函数库提供了XSS安全过滤的remove_xss方法;

注意:新版对URL访问的一些系统变量已经做了XSS处理。

 

其他相关建议:

• 对所有公共的操作方法做必要的安全检查,防止用户通过URL直接调用;

• 不要缓存需要用户认证的页面;

• 对用户的上传文件,做必要的安全检查,例如上传路径和非法格式;

• 如非必要,不要开启服务器的目录浏览权限;

• 对于项目进行充分的测试,不要生成业务逻辑的安全隐患(很重要哦);

最后一点,做好服务器的安全防护;

 

 

 

 

 

 

 

 

 

 

 

技术讨论群:489451956(新)

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ThinkPHP是一个开源的PHP框架,它能够帮助开发者快速搭建网站。使用ThinkPHP框架有以下几个步骤: 1. 安装:首先,需要在服务器上安装PHP和MySQL,然后从官方网站上下载最新的ThinkPHP框架压缩包。将其解压缩到服务器的网站根目录下。 2. 配置:接下来,需要编辑ThinkPHP框架的配置文件。配置文件允许开发者定义数据库连接、URL路由等重要参数。通过修改配置文件,可以轻松地配置网站的各种功能。 3. 编写代码:一旦完成了配置,就可以开始编写代码了。ThinkPHP框架通过模块、控制器和视图的结构来组织代码。开发者可以根据实际需要创建相应的模块和控制器,并在控制器中编写处理逻辑。视图用于展示数据和用户界面。 4. 数据库操作:ThinkPHP框架提供了丰富的数据库操作方法,开发者可以轻松地进行数据库的增删改查操作。框架中的模型类可以简化数据库查询和数据操作,使得开发过程更加高效。 5. 路由设置ThinkPHP框架的路由功能可以帮助开发者定义网站的URL规则。通过配置路由规则,可以实现友好的URL地址,并将用户请求正确地转发到相应的控制器和方法。 使用ThinkPHP框架可以大大简化网站开发的过程,提高开发效率。框架具备强大的功能和丰富的扩展库,开发者可以根据实际需求选择适合的组件来完成各种功能。同时,框架还提供了丰富的文档和示例代码,便于开发者学习和使用。通过灵活的配置和强大的功能,使用ThinkPHP框架可以快速搭建出稳定、安全、高效的网站。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云水之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值