ホームページ  >  記事  >  バックエンド開発  >  PHP は str_replace を使用してインジェクションメソッドを防止します_PHP チュートリアル

PHP は str_replace を使用してインジェクションメソッドを防止します_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:25:26686ブラウズ

PHPのさまざまなフィルタリング文字関数

コードをコピー コードは次のとおりです:

   /**
* 安全过滤函数
*
* @param $string
* @return string
*/
function safe_replace($string) {
$string = str_replace('%20','',$string);
$string = str_replace('%27','',$string);
$string = str_replace('%2527','',$string);
$string = str_replace('*','',$string);
$string = str_replace('"','"',$string);
$string = str_replace("'",'',$string);
$string = str_replace('"','',$string);
$string = str_replace(';','',$string);
$string = str_replace('<','<',$string);
$string = str_replace('>','>',$string);
    $string = str_replace("{",'',$string);
    $string = str_replace('}','',$string);
    $string = str_replace('','',$string);
    return $string;
    }
    ?>


    /**
* 返回经addslashes处理过的字符串或数组
* @param $string 需要处理的字符串或数组
* @return mixed
*/
function new_addslashes($string) {
if(!is_array($string)) return addslashes($string);
foreach($string as $key => $val) $string[$key] = new_addslashes($val);
    return $string;
    }
    ?>


    //对请求的字符串进行安全处理
/*
$safestep
0 为不处理,
1 为禁止不安全HTML内容(javascript等),
2 完全禁止HTML内容,并替换部份不安全字符串(如:eval(、union、CONCAT(、--、等)
*/
function StringSafe($str, $safestep=-1){
$safestep = ($safestep > -1) ? $safestep : 1;
    if($safestep == 1){
    $str = preg_replace("#script:#i", "script:", $str);
    $str = preg_replace("#<[/]{0,1}(link|meta|ifr|fra|scr)[^>]*>#isU", '', $str);
    $str = preg_replace("#[ ]{1,}#", ' ', $str);
    return $str;
    }else if($safestep == 2){
    $str = addslashes(htmlspecialchars(stripslashes($str)));
    $str = preg_replace("#eval#i", 'eval', $str);
    $str = preg_replace("#union#i", 'union', $str);
    $str = preg_replace("#concat#i", 'concat', $str);
    $str = preg_replace("#--#", '--', $str);
    $str = preg_replace("#[ ]{1,}#", ' ', $str);
    return $str;
    }else{
    return $str;
    }
    }
    ?>

$ $ text = preg_replace( '/&lt;! - ?。* - &gt;/'、 ''、$ text);

&gt;/'、' '、$ text); $ text =( '[','[',$text);
// 改行をフィルターi','[br]',$text);
$text = preg_replace('/([br]s*){10,} /i','[br]', $text);
: | アクション | コードベース | Lowsrc) [^& gt; & l T ) ^<]+)(window.|javascript:|js:|file:|document.|vbs: |cookie)([^><]*)/i',$text,$ mat) {t $ Text = Str_replace ($ Mat [0], $ Mat [1]. $ Mat [3], $ Text ); $ htmltags ['lock'];
$text = preg_replace('/<]*>/i','',$text);
           //过滤合法的html标签
           while(preg_match('/<([a-z]+)[^><[]]*>[^><]*/i',$text,$mat)){
               $text=str_replace($mat[0],str_replace('>',']',str_replace('<','[',$mat[0])),$text);
}
//转换引号
while(preg_match('/([[^[]]*=s*)("|')([^2=[]]+)2([^[]]*])/i',$text,$mat)){
$text=str_replace($mat[0],$mat[1].'|'.$mat[3].'|'.$mat[4],$text);
}
//空属性转换
$text = str_replace('''','||',$text);
$text = str_replace('""','||',$text);
//过滤错误的单个引号
while(preg_match('/[[^[]]*("|')[^[]]*]/i',$text,$mat)){
$text=str_replace($mat[0],str_replace($mat[1],'',$mat[0]),$text);
}
//转换其它所有不合法的 < >
           $text =  str_replace('<','<',$text);
$text = str_replace('>','>',$text);
           $text = str_replace('"','"',$text);
           //反转换
           $text =  str_replace('[','<',$text);
$text = str_replace(']','>',$text);
           $text =  str_replace('|','"',$text);
           //过滤多余空格
           $text =  str_replace('  ',' ',$text);
           return $text;
       }
    ?>


function RemoveXSS($val) {
// 印刷できない文字をすべて削除します。 CR(0a)、LF(0b)、TAB(9) は許可されます
// これにより、 などの一部の文字の再間隔が妨げられます。
// 一部の入力では * 許可されている*ため、 、 、およびそれ以降で分割を処理する必要があることに注意してください。 // 入力
$val = preg_replace('/([x00-x08,x0b-x0c,x0e-x19])/ '、''、$val);
// 直接の置換。これらは通常の文字であるため、ユーザーはこれらを必要としません
// これにより、 のようなエラーが防止されます。
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*()';
$search .= '~`";:?+/={}[]-_|'';
for ($i = 0; $i // ;? ; に一致します (オプション)
// 0{0,7} は任意の埋め込みゼロ (オプションで最大 8 文字まで) に一致します
// @ @ 16 進数の値を検索します
$val = preg_replace('/ ([xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val);// ;
// @ @ 0{0,7} は '0' に 0 ~ 7 回一致します
$val = preg_replace('/({0,8}'.ord($search[$i]).' ;?)/', $search[$i], $val); // ; を使用します
}
// 残りの空白攻撃は 、 、および
$ra1 = Array('javascript', 'vbscript' 、'式'、'アプレット'、'メタ'、'xml'、'ブリンク'、'リンク'、'スタイル'、'スクリプト'、'埋め込み'、'オブジェクト'、'iframe'、'フレーム'、'フレームセット', 'ilayer', 'layer', 'bgsound', 'title', 'base');
$ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy'、'onbeforecut'、'onbeforedeactivate'、'onbeforeeditfocus'、'onbeforepaste'、'onbeforeprint'、'onbeforeunload'、'onbeforeupdate'、'onblur'、'onbounce'、'oncellchange'、'onchange'、'onclick '、'oncontextmenu'、'oncontrolselect'、'oncopy'、'oncut'、'ondataavailable'、'ondatasetchanged'、'ondatasetcomplete'、'ondblclick'、'ondeactivate'、'ondrag'、'ondragend'、'ondragenter'、 'ondragleave'、'ondragover'、'ondragstart'、'ondrop'、'onerror'、'onerrorupdate'、'onfilterchange'、'onfinish'、'onfocus'、'onfocusin'、'onfocusout'、'onhelp'、'onkeydown '、'onkeypress'、'onkeyup'、'onlayoutcomplete'、'onload'、'onlosecapture'、'onmousedown'、'onmouseenter'、'onmouseleave'、'onmousemove'、'onmouseout'、'onmouseover'、'onmouseup'、 'onmousewheel'、'onmove'、'onmoveend'、'onmovestart'、'onpaste'、'onpropertychange'、'onreadystatechange'、'onreset'、'onresize'、'onresizeend'、'onresizestart'、'onrowenter'、'onrowexit '、'onrowsdelete'、'onrowsinserted'、'onscroll'、'onselect'、'onselectionchange'、'onselectstart'、'onstart'、'onstop'、'onsubmit'、'onunload');
$ra = array_merge($ra1, $ra2);
$found = true; // 前のラウンドで何かが置き換えられている限り置き換え続けます
while ($found == true) {
$val_before = $val;
for ($i = 0; $i < sizeof($ra); $i++) {
$pattern = '/';
for ($j = 0; $j if ($j > 0) {
$pattern .=
$pattern .= '(&#[xX]0{0,8}([9ab]);)';
$pattern .= '|';
$pattern .= '|(�{0,8}([9|10|13]);)';
$pattern .= ')*';
}
$pattern .= $ra[$i][$j];
}
$pattern .= '/i';
$replacement = substr($ra[$i], 0, 2).''.substr($ra[$i], 2); // <>を追加します。タグをナーフするには
$val = preg_replace($pattern, $replacement, $val); // 16 進タグを除外します
if ($val_before == $val) {
// 置換は行われなかったため、ループを終了します
$found = false;
}
}
}
$valを返します。
}
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/825062.html技術記事 PHP 各种过滤字符関数関数 复制代码 代码如下: ?php /*** セキュリティフィルター関数 * * @param $string * @return string*/ function safety_replace($string) { $string = str_replace('...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。