我使用mysqli,我尝试过phpPDO,laravel,fluentPDO,但我的问题始终是更新。
我有强大的安全规则,不得违反,在某些表格中,某些用户不允许更新某些字段,我认为mysqli不好,但问题是......
如何强制ajax json传递的对象只更新一些预定义的字段?我的意思是在服务器端(PHP)
你还有其他建议吗?...
我真的不喜欢使用mysqli,但我无法使用任何查询生成器来查看如何处理此问题...这很痛苦,因为我的查询变得更长,我必须工作在我自己的反对SQL注入
答案 0 :(得分:1)
在像Laravel这样的框架中,查看ORM中的mass assignment限制。您可以限制可以编辑的字段。您还可以在更新模型之前过滤这些内容。
有白名单和黑名单选项。文档中的示例:
class User extends Model {
protected $fillable = ['first_name', 'last_name', 'email'];
}
这不是查询生成器问题。这是您在生成查询之前很久就会解决的问题。
答案 1 :(得分:-1)
if(!in_array($_POST['field'],array(
'every','field','this','user','is','allowed','to','edit'
))){
die("you do not have access to modify field ".htmlentities($_POST['field'],ENT_SUBSTITUTE));
}
$st=$db->prepare("UPDATE table SET ".$_POST['field']." = ?");
$st->execute(array($_POST['newData']));
并且在js方面:
var xhr=new XMLHttpRequest();
xhr.open("POST","?");
var fd=new FormData();
fd.set("newData","foobar");
fd.set("field","allowed");
xhr.send(fd);//no problem! "allowed" is in the whitelist!
fd.set("field","password");
xhr.send(fd);//error! you do not have access to modify field "password"!