ThinkPHP在考虑开发体验的同时,仍然十分重视框架的底层安全,虽然屡有安全漏洞被播报,但官方都是第一时间进行修复处理,而且大部分漏洞只要开发者有一定的安全意识都是可以避免的,今年也和国内的几个安全团队建立了合作关系,有助于提前发现和及时修正框架可能被利用的漏洞或者隐患。
请务必把你的WEB
根目录指向public
目录而不是应用根目录,并且不要随意更改入口文件的位置。public
目录下面不要放除了入口文件和资源文件以外的其它应用文件。
在部署到生产环境的时候,确保你已经关闭了调试模式,可以通过修改环境变量的方式关闭调试模式。
永远不要相信用户的输入。
框架建议的获取请求变量的方法是Request
类的param
方法。对于有明确类型的请求变量,可以在使用param
方法的时候使用类型强制转换。
// 强制转换字符串数据 $name = $request->param('name/s');
// 强制转换整型数据 $name = $request->param('id/d');
// 强制转换浮点型数据 $name = $request->param('score/f');
常见的安全过滤函数包括stripslashes、htmlentities、htmlspecialchars和strip_tags。
验证器的验证操作应该在控制器或者路由阶段使用validate
方法进行处理,模型的数据验证功能新版已经取消不再建议使用,模型和数据库操作的时候应该传入经过安全处理过的数据。
跨站脚本攻击(cross-site scripting,简称 XSS
),XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
CSRF 跨站请求伪造是 Web 应用中最常见的安全威胁之一,攻击者伪造目标用户的HTTP请求,然后此请求发送到有CSRF漏洞的网站,网站执行此请求后,引发跨站请求伪造攻击。
会话劫持是指攻击者利用各种手段来获取目标用户的session id
。一旦获取到session id
,那么攻击者可以利用目标用户的身份来登录网站,获取目标用户的操作权限。
'use_trans_sid' => 0, 'httponly' => true, 'secure' => true,