"《ThinkPHP3.1 完全开发手册》是一份详细的教程,讲述了在ThinkPHP3.1框架中进行输入过滤、表单数据合法性检测等关键安全措施,以确保Web应用的安全性。手册强调了不相信客户端提交的数据,推荐开启令牌验证防止重复提交,利用自动验证和自动完成进行初步过滤,以及使用系统提供的获取数据方法和安全过滤函数。此外,还介绍了如何设置VAR_FILTERS参数来过滤GET和POST系统变量,并提供了数据对象的合法性检测方法。"
在ThinkPHP3.1中,输入过滤是防止恶意攻击的重要环节。开发者应该始终假设客户端提交的数据不可信,因此需要对输入数据进行严格的过滤处理。手册建议:
1. **开启令牌验证**:为了防止重复提交和跨站请求伪造(CSRF)攻击,应当启用令牌验证。这可以通过在表单中添加一个隐藏字段并验证其有效性来实现,以确保每个请求的独特性。
2. **自动验证和自动完成机制**:利用ThinkPHP的自动验证功能,可以在数据进入数据库之前检查其是否符合预设规则,如非空、长度限制等。自动完成机制则可对某些字段自动填充默认值或预处理数据。
3. **使用系统Action类的方法获取数据**:通过Action类的_get、_post、_cookie等方法,可以安全地获取客户端的输入,这些方法通常会自动进行一定的安全过滤。
4. **安全过滤函数**:如`stripslashes`去除反斜杠,`htmlentities`和`htmlspecialchars`用于防止XSS(跨站脚本)攻击,将特殊字符转换为HTML实体。此外,`ORG.Util.Input`类提供更全面的输入处理方法,适用于复杂场景。
系统变量的全局过滤是另一个增强安全性的手段。`VAR_FILTERS`配置项可定义对GET和POST变量的过滤方式。设置单一或多个过滤方法,如`htmlspecialchars`和`stripslashes`,并确保它们能正确处理多维数组,以覆盖所有可能的数据层次。
对于表单数据的合法性检测,ThinkPHP3.1提供了两种策略:
1. **配置insertFields和updateFields属性**:当使用`create`方法创建数据对象时,可以通过这两个属性分别指定新增和编辑表单的字段,只允许指定的字段进行插入或更新操作,以限制非法数据的写入。
手册的这部分内容旨在帮助开发者建立健壮的安全防护机制,确保在ThinkPHP3.1框架下的Web应用具备良好的安全性。通过理解和实践这些原则,开发者可以构建出既高效又安全的应用程序。