收藏文章 楼主
版块:seo软文   类型:普通   作者:ncbhkj   查看:59   回复:0   获赞:0   时间:2023-02-20 17:02:25

       ThinkPHP是一个快速、兼容而且简单的轻量级PHP开发框架,是为企业级应用开发和WEB应用开发而诞生的,规范的使用框架,能让我们尽量的避免一些看起来比较幼稚的安全问题,下面南昌APP开发公司百恒科技小编来跟大家聊一下ThinkPHP的安全注意事项有哪些。


       ThinkPHP在考虑开发体验的同时,仍然十分重视框架的底层安全,虽然屡有安全漏洞被播报,但官方都是及时进行修复处理,而且大部分漏洞只要开发者有一定的安全意识都是可以避免的,今年也和国内的几个安全团队建立了合作关系,有助于提前发现和及时修正框架可能被利用的漏洞或者隐患。


       1、规范部署


       这一点很多开发者不是特别重视,安全是一个整体性的问题,任何一个环节出问题,带来的后果都是一样的严重,部署的安全策略是一个基础安全问题。


       很多开发者往往不按照官方的部署规范进行部署,请务必把你的WEB根目录指向public目录而不是应用根目录,并且不要随意更改入口文件的位置。public目录下面不要放除了入口文件和资源文件以外的其它应用文件。


       2、关闭调试模式


       在部署到生产环境的时候,确保你已经关闭了调试模式,可以通过修改环境变量的方式关闭调试模式。


       APP_DEBUG=false 


       无论是本地开发还是生产环境部署,都不建议直接通过修改配置文件的方式开启/关闭调试模式,而应该使用环境变量(本地开发可以通过定义.env文件)。


       关闭调试模式后,系统的健康状态和运行监控主要依靠日志或者你使用的监控服务。所以,要养成定时检查日志和运行状态的习惯。


       3、请求变量过滤


       永远不要相信用户的输入,这是一句至理名言。尽可能的过滤请求变量能有效防范大部分的漏洞和隐患。


       框架建议的获取请求变量的方法是Request类的param方法(如非必要不要再使用get或者post方法获取,更不要使用原生的$_GET/$_POST等方法获取)。


       public function index(Request $request) { $name = $request->param('name'); // 在这里可以根据你的业务需求进行更严谨的过滤 // 例如 $name = $request->param('name','','htmlentities,strtolower'); // 或者使用验证器进行专门的验证 } 


       对于有明确类型的请求变量,可以在使用param方法的时候使用类型强制转换,例如:


       public function index(Request $request) { // 强制转换字符串数据 $name = $request->param('name/s'); // 强制转换整型数据 $name = $request->param('id/d'); // 强制转换浮点型数据 $name = $request->param('score/f'); } 


       或者直接使用方法参数获取请求变量


       public function index(string $name) { // 在这里可以根据你的业务需求进行更严谨的过滤 // 或者使用验证器进行专门的验证 } 


       如果你需要对所有数据进行处理,可以设置全局的过滤方法。对不同的应用需求设置default_filter过滤规则(默认没有任何过滤规则),常见的安全过滤函数包括stripslashes、htmlentities、htmlspecialchars和strip_tags等,请根据业务场景选择蕞合适的过滤方法。


       如果需要获取多个数据,建议使用only方法指定需要获取的变量名称,避免有些不怀好意的数据提交导致权限问题。


       public function index(Request $request) { // 指定表单数据名称 $data = $request->only(['name','title']); } 


       当你使用数据库或者模型操作写入数据的时候,也可以指定字段,避免非法和不希望的字段写入数据库。


       // 模型 User::allowField(['name','title']) ->save($data); // 数据库 Db::name('user') ->field(['name','title']) ->insert($data); 


       模型还有一个只读字段的功能能避免你的数据受到外部的修改。


       4、上传检测


       网站的上传功能也是一个非常容易被攻击的入口,所以对上传功能的安全检查是尤其必要的。


       系统的think\File类提供了文件上传的安全支持,包括对文件后缀、文件类型、文件大小以及上传图片文件的合法性检查,确保你已经在上传操作中启用了这些合法性检查,可以参考手册的上传章节。


       5、SQL注入


       ThinkPHP的查询统一使用了PDO的prepare预查询和参数绑定机制,能有效的避免SQL注入的发生。但不代表一定安全,如果你缺乏良好的代码规范,仍然有可能被利用。


       一个蕞简单的原则是不要让用户决定你的查询条件(或者字段排序)和控制你的查询数据。


       对于一些字符串的查询条件(包括原生查询)或者特殊的查询(包括ORDER部分),需要手动进行参数绑定。


       // 错误的 Db::query("select * from think_user where id=$id AND status=$statis"); // 正确的 Db::query("select * from think_user where id=? AND status=?", [ $id, $status]); // 正确的 Db::execute("update think_user set name=:name where status=:status", [ 'name' => 'thinkphp', 'status' => 1 ]); 


       对于使用了whereExp和whereRaw方式的查询,你也需要使用参数绑定。


       Db::name('user') ->whereRaw('id > ? AND status = ?',[10, 1]) ->select(); 


       6、使用验证器


       对于大量的表单需要验证的情况,建议使用验证器功能统一进行数据的合规验证。验证器的验证操作应该在控制器或者路由阶段使用validate方法进行处理,模型的数据验证功能新版已经取消不再建议使用,模型和数据库操作的时候应该传入经过安全处理过的数据。


       7、XSS攻击


       跨站脚本攻击(cross-site scripting,简称 XSS),XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。


       在渲染输出的页面中,要对一些数据进行安全处理,防止被恶意利用造成XSS攻击,如果是5.1版本的话,所有的输出都已经经过了htmlentities 转义输出,确保安全。如果是5.0版本的话,你可以自定义一个xss过滤函数,在模板文件中对一些关键内容变量进行函数处理。


       CSRF_132" style="box-sizing:inherit;margin:-10px 0px 0px;padding:0px;color:#009A61;position:absolute;">CSRF


       CSRF 跨站请求伪造是 Web 应用中非常常见的安全威胁之一,攻击者伪造目标用户的HTTP请求,然后此请求发送到有CSRF漏洞的网站,网站执行此请求后,引发跨站请求伪造攻击。攻击者利用隐蔽的HTTP连接,让目标用户在不注意的情况下单击这个链接,由于是用户自己点击的,而他又是合法用户拥有合法权限,所以目标用户能够在网站内执行特定的HTTP链接,从而达到攻击者的目的。


       开启表单令牌验证,尽量开启强制路由并严格规范每个URL请求,定义单独的MISS路由规则。


       遵循请求类型的使用规范并做好权限验证,删除操作必须使用DELETE请求,数据更改操作必须使用POST、PUT 或者 PATCH 请求方法,GET请求不应该更改任何数据。


       8、会话劫持


       会话劫持是指攻击者利用各种手段来获取目标用户的session id。一旦获取到session id,那么攻击者可以利用目标用户的身份来登录网站,获取目标用户的操作权限。


       有效的防护策略包括:


       在每次会话启动的时候,调用regenerate方法。


       Session::start(); Session::regenerate(true); 


       更改session配置参数,开启安全选项:


       'use_trans_sid' => 0, 'httponly' => true, 'secure' => true, 


       9、升级到安全版本


       官方会对一些安全隐患和潜在漏洞进行修复,并且发布一个更为安全的版本。请确认你升级到更安全的版本,确保底层的安全和健壮性。


       目前各个版本的建议版本如下:


       大版本                                            安全建议版本

       3.2                                                  3.2.4+

       5.0                                                  5.0.21+

       5.1                                                  5.1.25+


       关注官方的公众号和开发者周刊,注意蕞新的安全更新。


       10、业务逻辑安全


       这个属于应用层面的安全,很多漏洞源于某个业务逻辑自身的安全隐患,包括没有做合理的数据验证和权限检查,尤其是涉及资金及财务层面的,一定要做更多的安全检查,并且开启事务。一个好的建议是更多的对应用进行分层设计,减少每层的复杂性,独立的分层设计便于提高安全性。


       11、服务器安全


       还有是运维阶段需要特别注意的,及时更新服务器的安全补丁,确保没有可利用的公开系统漏洞,包括你的数据库系统安(尤其是数据备份工作)。


       以上是南昌APP开发公司百恒科技小编要跟大家聊到的关于ThinkPHP的安全注意事项,希望能够对大家有所帮助,想要了解更多关于这方的内容欢迎留言咨询百恒科技,百恒科技专注于南昌APP开发南昌小程序开发南昌网站建设开发等服务!



相关文章推荐   :    用FFmpeg对视频转码压缩的方法     


                  关于ThinkPHP开发框架远程代码执行漏洞的通告      


全站外链: TEC传感器 | 猫掌外链
网站建设、网站推广、APP开发、小程序开发 
回复列表
默认   热门   正序   倒序

回复:ThinkPHP的安全注意事项有哪些?

网站公告

近期本站被人为恶意注册及发布垃圾帖,每一个发帖都会经过审核,一经发现违法或垃圾帖的用户,帖子将被删除或封号,请大家共同维护互联网环境,共创美好互联网未来。

详细的发帖规则请阅读:

《小猪外链网发帖规则》

《小猪外链网最新金币规则》

注:本站严禁发布灰色违禁违法内容,如发现立刻永久封号,如开通会员的概不退款。

Powered by 小猪外链网 7.12.1

©2015 - 2024 小猪SEO外链平台

备案号:浙ICP备17015142号

免责申明:本网站内容由平台入驻会员撰写,除创始人账号外,其他观点仅代表作者本人,不代表小猪外链网立场。如果内容涉及侵犯其他公司、团体的利益、请联系小猪SEO外链网客服举证删除

您的IP:3.149.214.32,2024-04-18 18:47:23,Processed in 0.20062 second(s).

各位站长请准守小猪SEO外链网的发帖规则,文明理性发言

外链优化

用户名:

粉丝数:

签名:

资料 关注 好友 消息
分享
已有0次打赏