荆轲刺秦王
在实际项目中,对于用户提交的表单信息要做过滤,为了省事,将封装好的函数放到这里
先上公共函数:
if(! function_exists('array_txt_filter')) {
/**
* 过滤html标签sql注入 仅支持规则的一二维数组,字符串
* @param $param array|string
* @return $param
*/
function array_txt_filter($param)
{
$dimension = '';
if (is_array($param)) $dimension = array_depth($param);
if ($dimension == 1) {
foreach ($param as $k => $value) {
$param[$k] = htmlspecialchars(trim($value));//将字符内容转化为html实体
$param[$k] = addslashes($param[$k]); //防止SQL注入
}
return $param;
}
if ($dimension == 2) {
foreach ($param as $k => $value) {
if(is_array($value)){
foreach ($value as $key => $v) {
$param[$k][$key] = htmlspecialchars(trim($v)); //将字符内容转化为html实体
$param[$k][$key] = addslashes($param[$k][$key]); //防止SQL注入
}
}
}
return $param;
}
if (is_string($param)) {
$param = htmlspecialchars(trim($param));//将字符内容转化为html实体
$param = addslashes($param); //防止SQL注入
return $param;
}
return $param;
}
}
else
{
exit('Lib\function.php\array_txt_filter冲突');
}
这种方法是将传入的参数一并过滤,还有一种是单个过滤:
if (!function_exists('txt_filter')) {
function txt_filter( $txt )
{
$txt = trim($txt); //清理空格
$txt = strip_tags($txt); //过滤html标签
$txt = htmlspecialchars($txt); //将字符内容转化为html实体
$txt = addslashes($txt); //防止SQL注入
return $txt;
}
}
else
{
exit('Lib\function.php\txt_filter冲突');
}
在实际调用中可以这样:
public function levelAdd(Request $request){
$param = $request->input();
//判断参数
if ( empty($param['node_id']) || empty($param['brand_id']) ) {
S::error(40001);
}
//过滤参数
$sendParam = array_txt_filter($param);
}
这只是一个很简单的调用,还可以这样:
public function addWxMsg(Request $request)
{
$templateName = txt_filter($request -> get('name'));
$brandId = txt_filter($request -> get('brand_id'));
$pushId = txt_filter($request -> get('status'));
$templateId = txt_filter($request -> get('template_id'));
}
具体使用就是这样了。
但在实际使用中,理论上来说是要对用户输入的全部内容都要进行过滤,这其中可能包含带有特殊字符的字段,这个时候就需要转义一下,具体使用:htmlspecialchars_decode 函数实现。