Onex ecstore前台安全防止恶意修改字段
PHP程序员都应该知道,前台的Form表单是用的非常的多的,包括登录,注册,录一些相关的信息等等,几乎都用到表单,而后台的代码,现在都是只传整个数组进去后,就可以实现数据库的添加或修改了。
当然Ecstore也不例外。
下面将分享个前台防止恶意修改字段的方法。
第一步:
首先我们先确认一下表的结构,我们先举个例子:
info表:id(自增ID),name(姓名),sex(性别),age(年龄),我们默认都为字符串的类型。
第二步:
前台的页面代码:
<form id="form1" action="index.php" method="post">
<input type="text" name="name" />
<input type="text" name="sex" />
<input type="text" name="age" />
</form>
第三步:
后台index.php代码:
$arr = $_POST;
$info_mdl = $this->app->model("info");
//修改id为1的数据
$info_mdl->update($arr,array('id'=>1));
就是这样,非常方便又快捷的完成了修改功能。
但是你会发现如果稍微聪明点的程序员,访问了你的网站后,按了下F12,查看元素,自己加一个input或者修改下name=”id” ,然后给他赋值。改成别人的ID,你想想会出现什么状况呢?
我想你应该也清楚了,将会把目前的这个ID为1的数据,将1改成了其他的值了。
所以,教给大家一个解决的方法:
第四步:
在修改的代码前使用:
//定义好你自己数据库的字段。放在一个数组里
$arr_colunm = array('name','sex','age');
//进行foreach循环遍历
foreach($_POST as $post_key=>$post_value){
//判断name是否存在于该数据,如果在则通过,不存在则执行下面if条件
if(!in_array($_post_key,$arr_colunm)){
//清除不是 name,sex,age字段的所有数据。
unset($_POST[$post_key]);
}
}
//现在再进行修改就可以实现了。
$info_mdl->update($_POST);