ホームページ > バックエンド開発 > PHPチュートリアル > PHPスーパーフィルター関数

PHPスーパーフィルター関数

WBOY
リリース: 2016-06-23 13:58:40
オリジナル
882 人が閲覧しました

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>
ログイン後にコピー
Aile Ai Happy からの転載指示 私のブログアドレス: http://blog. csdn.net/lovehappying 記事アドレス

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート