如何防止URL添加数据?
addView页面中提交数据后,调用add函数,然后添加到数据库,但现在我直接在URL中输入localhost/user/add
这样也可以直接添加一条数据...
mysql> select * from users;
+----+----------+------+------+
| id | name | age| sex|
+----+----------+------+------+
| 41 | fhfdhdfg | 345| 1 |
+----+----------+------+------+
直接访问localhost/user/add后
mysql> select * from users;
+----+----------+------+------+
| id | name | age| sex|
+----+----------+------+------+
| 41 | fhfdhdfg | 345| 1 |
| 43 | 0 | 0 | 0 |
+----+----------+------+------+
也已经配置了
$config['global_xss_filtering'] = TRUE;
然后删除的函数,我直接访问localhost/user/delete/43
也可以直接把数据给删除了...
有什么办法可以防止上面这2种情况吗??
还有...我add_success页面里使用
<script type=text/javascript>
var t=3;
function later_back() {
backL.innerHTML=t;
t--;
if (t==0)
location.href = 'show';
setTimeout("later_back();",1000);
}
later_back();
</script>
可以成功的将页面导向到localhost/user/show
可是在del_success页面中
同样的代码却不行
add_success页面的URL是localhost/user/add_success
而del_success页面的URL是localhost/user/delete/id
如果我直接使用上面的JS,则它3秒后跳转到
localhost/user/delete/show(这页面肯定是没有的...)
让我不得不在localhost.href中直接写localhost/user/show
+-------+------------------------------------------------------------------------
| Table | Create Table
+-------+------------------------------------------------------------------------
| users | CREATE TABLE `users` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`name` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
`age` varchar(3) CHARACTER SET utf8 DEFAULT NULL,
`sex` varchar(2) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=43 DEFAULT CHARSET=utf8 COLLATE=utf8_estonian_ci |
+-------+------------------------------------------------------------------------
<?php
class User extends Controller {
function User() {
parent::Controller();
}
function index() {
$data = array('title'=> 'User System',
'message' => 'Welcome to User System!'
);
$this->load->view('index',$data);
}
function addView() {
$data = array('title'=> '添加用户',
'message' => '添加新用户到当前系统。'
);
$this->load->view('user_view_add',$data);
}
function add() {
$this->load->model('User_Model','User');
$this->User->addUser();
redirect('user/add_success','refresh');
}
function add_success() {
$data = array('title' => '添加用户成功',
'message' => '添加用户成功!'
);
$this->load->view('add_success',$data);
}
function show() {
$this->load->model('User_Model','User');
$result = $this->User->showUser();
$data = array('title' => '用户列表',
'message' => '以下是当前所有用户:',
'values' => $result
);
$this->load->view('user_view_show',$data);
}
function delete($id) {
$this->load->model('User_Model','User');
$this->User->delUser($id);
$data = array('title' => '删除用户成功',
'message' => '删除用户成功!'
);
$this->load->view('del_success',$data);
}
}
?>
<?php
class User_Model extends Model {
function User_Model() {
parent::Model();
}
function addUser() {
$data = array('name' => $this->input->post('name'),
'age' => $this->input->post('age'),
'sex' => $this->input->post('sex'),
);
$this->db->insert('users',$data);
}
function showUser() {
$query = $this->db->get('users');
return $query->result();
}
function delUser($id) {
$query = $this->db->delete('users',array('id' => $id));
}
}
?>
控制器构造函数里检查session?? js 里 location.href = 'show'; 这个在 CI 里是不行的,必须用绝对 URL。
关于如何限制不允许 URL 访问,这个和纯 PHP 写的程序道理一样,以前如何限制在 CI 里也那样限制,比如可以限制 POST 提交才允许等等。 js 里 location.href = 'show'; 这个在 CI 里是不行的,必须用绝对 URL。
关于如何限制不允许 URL 访问, ...
Hex 发表于 2009-12-26 11:42 http://codeigniter.org.cn/forums/images/common/back.gif
{:3_65:} 我刚学PHP...
能给个例子或是资料吗??
我google搜索到的资料
“不用curl,纯PHP实现POST提交”
“php 模拟POST提交的2种方法”
Hex说的是这种方法吗?? 那楼主还是应该好好学习一下 PHP,然后再来学习 CI,这样效果会比较好。
至于这个问题,我觉得没必要限制,只要用户有权限就可以让他执行。
这里重要的是权限,比如是不是登陆用户,登陆的用户是不是管理员等等。
如果你非要限制,你可以限制 POST 或 Session
限制 POST 可以在 PHP 里检查 $_SERVER 变量(具体 $_SERVER 都有什么看 PHP 手册)
限制 Session 可以在执行这个操作之前设置一个 session,执行这个操作时候,检查这个 Session
大概就是这个思路了。
我再次强调一下,CI 不是给初学者使用的框架,必须有 PHP 基础。 那楼主还是应该好好学习一下 PHP,然后再来学习 CI,这样效果会比较好。
至于这个问题,我觉得没必要限制 ...
Hex 发表于 2009-12-27 09:54 http://codeigniter.org.cn/forums/images/common/back.gif
我是有JAVA的基础...
想说看一下基本语法应该就可以了...{:3_65:} 我是有JAVA的基础...
想说看一下基本语法应该就可以了...
consatan 发表于 2009-12-27 17:06 http://codeigniter.org.cn/forums/images/common/back.gif
JAVA 和 PHP 还有差别的吧~~如果有 ASP 基础还能沾点边,呵呵 然后删除的函数,我直接访问localhost/user/delete/43
也可以直接把数据给删除了...
=============================
汗。。。首先最好用post方法,其次谁有权限delete啊,不得check一下他的session或者cookies先啊。如果就是他自己,他愿意怎么delete就随他啊。 对呀,这应该是属于权限的问题呢,操作之前要判断操作人有没有操作这里的权限呀
PS:location.href=XX还是改成window.location=XX比较好:) 这个还是必须在User控制器里判断一下权限才行,首先检查访问者是否有权限(通过Session或者Cookie都可以),如果有权限再执行数据库操作。
页:
[1]
2