最近Github 被 Hack的事情经常被提及,由此联想到TP的安全性问题。熟悉TP的开发人员都知道TP有一个Create方法,可以完成表单数据自动创建功能,同样的,用户可以通过浏览器猜测字段,并伪造一些数据,而如果你没有做任何防护措施的话。官方的建议是Create方法配合自动验证和自动完成机制,例如,在自动验证里面对某些字段进行不能提交的验证,或者在自动完成里面对某些字段强制重新写入(包括状态、身份等等)。如果你不愿意用自动验证或者自动完成的话,还有一种方式是在使用Create方法之后,通过数据对象赋值的方式强制重新写入安全数据,例如:
$User = M('User');
if($User->create()){
// 关键代码在这里
$User->status = 0; // 指定状态写入
$User->is_admin =0; // 指定用户身份
// 或者根据你的业务要求动态判断后强制写入
// ... 后续进行保存操作
$User->save();
}else{
$this->error($User->getError());
}
后续改进请关注官方最新的开发版本更新。