PHP の超強力なフィルタリング機能 フィルタリングするたびに、常に前のフィルタリング コードに戻りますか?
フィルタリングと攻撃を防ぐ方法について PHP ソリューションを検索しましたか?
完全に適切なソリューションがありますか? Web 業界の古典的な格言である「入力をフィルタリングし、出力を回避する」に従ってください
実際、これらの問題では、入力データを時々フィルタリングする必要があります。ホワイトリストのフィルタリング方法は比較的信頼できます!
もちろん、より良いコードや何かがあれば、ディスカッションのためにメッセージを残してください!
最近、フィルタリングの問題について書いていることに気づきました。 1 年か 2 年 PHP を書いていて、フィルタリングの問題は常に大きな問題であることがわかりました。ありがとう、ここに一般的なホワイトリスト ベースのフィルタリング関数があります。
それが使用できない場合は、 qq852208555 までご連絡ください。一緒に話し合いましょう!
GBK GB2312 エンコーディング
<?php //白名单过滤模式开始$a='爱乐sdsadDDA22313\'@';echo AlFilter($a,'CWD_','@\'');/*过滤类分为几种类型 * $str(待过滤字符串),$operate(操作码),$ext(白名单扩展) * 操作码简写(不分大小写):1.汉字C 2.数字D 3.字母W 4.特殊符号T 5.下划线_ 经典的调用模式: 只允许数字:AlFilter($a,'D') 只允许汉字:AlFilter($a,'C') 只允许字母数组汉字:AlFilter($a,'CWD') 允许字母数字汉字下划线特殊字符:AlFilter($a,'CWD_T') 扩展模式:AlFilter($a,'CWD_T','@') AlFilter($a,'CWD_','@');//允许特殊字符 @ AlFilter($a,'CWD_','@\'');//允许特殊字符 @ '(加了反斜杠转义)*/function AlFilter($str=NULL,$operate,$ext=NULL){ if(!$str) return 0; //匹配模式 $pattern $Cp="".chr(0xa1)."-".chr(0xff).""; $Dp='0-9'; $Wp='a-zA-Z'; $Tp='@#$%^&*()-+='; $_p='_'; $pattern="/^["; $OArr=str_split(strtolower($operate));//拆分操作符 if (in_array('c', $OArr)) $pattern.=$Cp; if (in_array('d', $OArr)) $pattern.=$Dp; if (in_array('w', $OArr)) $pattern.=$Wp; if (in_array('t', $OArr)) $pattern.=$Tp; if (in_array('_', $OArr)) $pattern.=$_p; if($ext) $pattern.=$ext; $pattern.="]+$/"; if(!preg_match($pattern,$str)) return 0; else return $str; }
の実装は次のとおりです: (主に漢字のマッチングが異なります)
AlFilter($str=NULL,$operate,$ext=NULL){ if(!$str) return 0; //匹配模式 $pattern $Cp="\x{4e00}-\x{9fff}"; $Dp='0-9'; $Wp='a-zA-Z'; $Tp='@#$%^&*()-+='; $_p='_'; $pattern="/^["; $OArr=str_split(strtolower($operate));//拆分操作符 if (in_array('c', $OArr)) $pattern.=$Cp; if (in_array('d', $OArr)) $pattern.=$Dp; if (in_array('w', $OArr)) $pattern.=$Wp; if (in_array('t', $OArr)) $pattern.=$Tp; if (in_array('_', $OArr)) $pattern.=$_p; if($ext) $pattern.=$ext; $pattern.="]+$/u"; if(!preg_match($pattern,$str)) return 0; else return $str; }<p><br></p><p></p><strong>当然也可以只用UTF-8 GBK的转码过去匹配...反之亦然,不过我觉得麻烦当然有什么更好地改进办法,欢迎大家讨论,不吝赐教!</strong><br><p></p><p><br></p><p><br></p>