安全建议

最后更新于:2022-04-02 01:55:30

## 输入安全 虽然ThinkPHP的底层安全防护比之前版本要强大不少,但永远不要相信用户提交的数据,建议务必遵守下面规则: * 设置`public`目录为唯一对外访问目录,不要把资源文件放入应用目录; * 开启表单令牌验证避免数据的重复提交,能起到`CSRF`防御作用; * 使用框架提供的请求变量获取方法(Request类`param`方法及`input`助手函数)而不是原生系统变量获取用户输入数据; * 对不同的应用需求设置`default_filter`过滤规则(**默认没有任何过滤规则**),常见的安全过滤函数包括`stripslashes`、`htmlentities`、`htmlspecialchars`和`strip_tags`等,请根据业务场景选择最合适的过滤方法; * 使用[验证类](354101)对业务数据设置必要的验证规则; * 如果可能开启强制路由或者设置MISS路由规则,严格规范每个URL请求; ## 数据库安全 在确保用户请求的数据安全之后,数据库的安全隐患就已经很少了,因为数据操作默认使用了PDO预处理机制及自动参数绑定功能,请确保: * 尽量少使用字符串查询条件,如果不得已的情况下 使用手动参数绑定功能; * 不要让用户输入决定要查询或者写入的字段; * 不要让用户输入决定你的字段排序; * 对于敏感数据在输出的时候使用`hidden`方法进行隐藏; * 对于数据的写入操作应当做好权限检查工作; * 写入数据严格使用`field`方法限制写入字段; * 对于需要输出到页面的数据做好必要的`XSS`过滤; >[danger] 如果你使用的是`V5.1.10`以下版本,建议尽快更新到该版本(或者以上版本) > ## 上传 网站的上传功能也是一个非常容易被攻击的入口,所以对上传功能的安全检查是尤其必要的。 系统的`think\File`提供了文件上传的安全支持,包括对文件后缀、文件类型、文件大小以及上传图片文件的合法性检查,确保你已经在上传操作中启用了这些合法性检查。 ## 其它的一些安全建议: * 对所有公共的操作方法做必要的安全检查,防止用户通过URL直接调用; * 不要缓存需要用户认证的页面; * 对用户的上传文件,做必要的安全检查,例如上传路径和非法格式; * 对于项目进行充分的测试,不要生成业务逻辑的安全隐患(这可能是最大的安全问题); * 最后一点,做好服务器的安全防护,安全问题的关键其实是找到你的最薄弱环节; >[danger] 最后一点,及时关注官方安全更新,并更新到官方建议的安全版本,建议更新`V5.1.10+`版本,该版本包含安全更新。
';