关于 spArgs 的问题

#1 peter

spArgs代替$_GET/$_POST的数据获取,
1、能否固定住spArgs接受POST或者GET的值,而不是POST和GET都可以接收?
2、建议在spArgs接收值的时候,添加对数据过滤等其他操作?

2010-09-16 15:19:31

#2 jake

1.$this->spArgs('a',null,"get")可以获得get的a值,post也可以
2.如果希望“固定”,那么为什么不直接用$_GET和$_POST呢?
3.一般来说这种页面传参不会存在GET和POST相同名称的情况。
4.要对GET或POST进行“默认”的过滤,可以在入口文件处加上 array_walk 函数对GET和POST数组进行一次过滤即可。

2010-09-16 17:44:13

#3 peter

不是同时会使用GET和POST,在必须POST的情况下,如果被人用GET传值进来,貌似有点危险。呵呵

2010-09-18 10:23:33

#4 jake

不是同时会使用GET和POST,在必须POST的情况下,如果被人用GET传值进来,貌似有点危险。呵呵 ...
peter 发表于 2010-9-18 10:23
你说的是“远程提交攻击”吧,其实POST和GET都可以做到远程攻击的。不要以为在地址栏内写多个参数就叫做“如果被人用GET传值进来”。不仅GET可以增加和模拟,POST也可以被增加和模拟的。只要分析和伪装HTTP数据,无论是GET或者POST都会有同样的效果,除非使用HTTPS或者控件来避免。


防止“远程提交”最常用的方法,是SESSION加随机数,有些类似验证码,目前大部分的PHP开源程序都是这样来限制的,也不会去搞什么GET和POST的分别。

而且要避免“危险”,还是得要在接收的时候好好检查输入值,这是不可或缺的环节。

2010-09-18 11:26:05

#5 peter

我把 class spArgs 的 public function get($name = null, $default = FALSE, $method = null)里面返回值的时候加上过滤函数应该可以吧。
//cleardanger() 是自己写的一个过滤函数
switch (strtolower($method)) {
case 'get':
return cleardanger($_GET[$name]);
case 'post':
return cleardanger($_POST[$name]);
case 'cookie':
return cleardanger($_COOKIE[$name]);
}

2010-09-18 14:43:38

#6 jake

我把 class spArgs 的 public function get($name = null, $default = FALSE, $method = null)里面返回值的 ...
peter 发表于 2010-9-18 14:43
不建议修改框架文件

2010-09-18 20:10:28