变量安全过滤,防止xss攻击

下面这个方法不管是字符串还是数组,都可以进行过滤

/**
 * @purpose     : 对变量进行安全过滤,使 $_GET、$_POST、$q->record 等变量更安全
 * @author      : daicr
 * @time        : 2018-03-15
 * @param       : array $fArray 需要转换的数组
 * @return      :array $fArray 转换完成的数组
 */
function varFilter ($fArray) {
    if (is_array($fArray)) {
        foreach ( $fArray AS $_arrykey => $_arryval ) {
            if ( is_string($_arryval) ) {
                $fArray[$_arrykey] = trim($fArray[$_arrykey]);                                        // 去除左右两端空格
                $fArray[$_arrykey] = htmlspecialchars($fArray[$_arrykey]);                            // 将特殊字元转成 HTML 格式
                $fArray[$_arrykey] = strip_tags($fArray[$_arrykey]);                                  // 从字符串中去除 HTML 和 PHP 标记
                $fArray[$_arrykey] = str_replace('javascript', 'javascript ', $fArray[$_arrykey]);    // 禁止 javascript
                if (!get_magic_quotes_gpc()) {                                                        // 当 magic_quotes_gpc 设置为 OFF 时,特殊字符加转移符 \
                    $fArray[$_arrykey] = addslashes($fArray[$_arrykey]);
                }
            }else if (is_array($_arryval)){        // 如果是数组,递归调用                    
                $fArray[$_arrykey] = varFilter($_arryval);
            }
        }
    } else {
        $fArray = trim($fArray);                                    // 去除左右两端空格
        $fArray = htmlspecialchars($fArray);                        // 将特殊字元转成 HTML 格式
        $fArray = strip_tags($fArray);                              // 从字符串中去除 HTML 和 PHP 标记
        $fArray = str_replace("javascript", "javascript ", $fArray);// 禁止 javascript
        if (!get_magic_quotes_gpc()) {                                                        // 当 magic_quotes_gpc 设置为 OFF 时,特殊字符加转义符 \
            $fArray = addslashes($fArray);
        }
    }
    Return $fArray;
}

下面这个方法只用于过滤字符串中的一些特殊字符

/**
 * @purpose     :    字符串安全过滤函数,可过滤掉空格,*,",',;,<,>,{,},\,../,..,./,UNION等
 * @author        :    daicr
 * @time        :    2018-03-15
 * @param         :    string $string 需要进行过滤的字符串
 * @return         :    string $string 过滤完毕的字符串
 */
function strFilter($string) {
    $string = str_replace('%20','',$string);        // 过滤 空格
    $string = str_replace('%27','',$string);        // 过滤 '
    $string = str_replace('%2527','',$string);        // 过滤 '
    $string = str_replace('*','',$string);            // 过滤 *
    $string = str_replace('"','&quot;',$string);    // 将 " 转义为html实体
    $string = str_replace("'",'',$string);            // 过滤 '
    $string = str_replace('"','',$string);            // 过滤 "
    $string = str_replace(';','',$string);            // 过滤 ;
    $string = str_replace('<','&lt;',$string);        // 将 < 转义为html实体
    $string = str_replace('>','&gt;',$string);        // 将 > 转义为html实体
    $string = str_replace("{",'',$string);            // 过滤 {
    $string = str_replace('}','',$string);            // 过滤 }
    $string = str_replace('\\','',$string);            // 过滤 
    $string = str_replace("../","",$str);            // 过滤 ../
    $string = str_replace("..","",$str);            // 过滤 ..
    $string = str_replace("./","",$str);            // 过滤 ./
    $string = str_ireplace("UNION","",$str);        // 忽略大小写过滤 UNION
    return $string;
}

对用户输入的字符串进行过滤,以防止 xss 攻击

posted @ 2018-03-15 18:05  Chrdai  阅读(1342)  评论(0编辑  收藏  举报