很多时候php后台接受前端发送来的post提交或者get提交;
需要进行一些类似csf过滤,mysql注入过滤;
本身thinkphp对提交的网络数据是进行过 简单的安全防护的;
获得get请求的数据;可以用
request::get('参数名','默认值');
获得post请求提交的数据,可以用
request::post('参数名','默认值');
在不确定客户端采用post还是get请求时,可以用param 方法;
request::param('参数名','默认值');
thinkphp对 数据是做过安全过滤的;
为了安全保障,我们自己也能对数据进行常用的过滤
下面是实现办法:
/**
* 过滤接受的参数
* @param $str
* @return array|mixed|string|string[]|null
*/
public function filterWord($str, string $field = null)
{
if (!$str) return $str;
if (strstr($field, '/')) {
[$field] = explode('/', $field);
}
if ($field && in_array($field, $this->except)) {
return $str;
}
// 把数据过滤
$farr = [
"/<(\\/?)(script|i?frame|style|html|body|title|link|meta|object|\\?|\\%)([^>]*?)>/isU",
"/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU",
"/select|join|where|drop|like|modify|rename|insert|update|table|database|alter|truncate|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile|dump/is"
];
if (is_array($str)) {
foreach ($str as &$v) {
if (is_array($v)) {
foreach ($v as &$vv) {
if (!is_array($vv)) $vv = preg_replace($farr, '', $vv);
}
} else {
$v = preg_replace($farr, '', $v);
}
}
} else {
$str = preg_replace($farr, '', $str);
}
return $str;
}
thinkphp 的facde函数 input 是对 request get post 和param 的一个快速访问;
input('get.') 表示获取get全部参数;
input('post.') 表示获取post 全部参数;
input('param.')表示获取全部 参数;
还有一个 最适用的方法 input('')可以获取 get post 等任意请求 的参数;
也能获取通过php 管道传输的数据
好了,本文内容全部结束,感谢您的阅读,希望对您有所帮助;